Java基础巩固:类和对象的初始化顺序

PFC电压环与电流环的带宽设计:如何避免输入电流畸变? 本文深入探讨了PFC电路中电压环与电流环的带宽设计问题,揭示了快速电压环导致输入电流畸变的机制,并提供了避免THD上升的工程实践方法。通过分析双环控制架构、谐波失真原理及带宽设计黄金法则,帮助工程师优化PFC系统性能,实现高功率因数与低谐波失真的平衡。 阅读详情

1  无继承情况下的Java初始化顺序

class Sample
{
      Sample(String s)
      {
            System.out.println(s);
      }
      Sample()
      {
            System.out.println("Sample默认构造函数被调用");
      }
}
class Test{
      static Sample sam=new Sample("静态成员sam初始化");
      Sample sam1=new Sample("sam1成员初始化");
      static{
            System.out.println("static块执行");
            if(sam==null)System.out.println("sam is null");
            sam=new Sample("静态块内初始化sam成员变量");
            }
      Test()
      {
            System.out.println("Test默认构造函数被调用");
      }

}
//主函数
 public static void  main(String  str[])
{

     Test a=new Test();

 }
输出结果为:
静态成员sam初始化     -----静态成员初始化
static块执行          -----静态块被执行
静态块内初始化sam成员变量 ----静态块执行
sam1成员初始化      -----普通成员初始化
Test默认构造函数被调用  -----构造函数执行


由此可以得出结论:
a 静态成员变量首先初始化(注意,Static可以看做一个静态成员,其执行顺序和其在类中申明的顺序有关)
b 普通成员初始化
c 执行构造函数。

对于静态成员和普通成员,其初始化顺序只与其在类定义中的顺序有关,和其他因素无关。

2 有继承情况下的初始化顺序

class Test{
      static{
            System.out.println("父类static 块 1  执行");
            }
      static Sample staticSam1=new Sample("父类 静态成员staticSam1初始化");
      Sample sam1=new Sample("父类 sam1成员初始化");
      static Sample staticSam2=new Sample("父类 静态成员staticSam2初始化");
      static{
            System.out.println("父类 static 块 2  执行");
            }
      Test()
      {
            System.out.println("父类 Test默认构造函数被调用");
      }
      Sample sam2=new Sample("父类 sam2成员初始化");

}

class TestSub extends Test
{
      static Sample staticSamSub=new Sample("子类 静态成员staticSamSub初始化");
      TestSub()
      {
            System.out.println("子类 TestSub 默认构造函数被调用");
      }
      Sample sam1=new Sample("子类 sam1成员初始化");
      static Sample staticSamSub1=new Sample("子类 静态成员staticSamSub1初始化");
      
      static{System.out.println("子类 static 块  执行");}
      Sample sam2=new Sample("子类 sam2成员初始化");
}

执行结果:
父类 static 块 1  执行
父类 静态成员staticSam1初始化
父类 静态成员staticSam2初始化
父类 static 块 2  执行
                        --------父类静态成员初始化
子类 静态成员staticSamSub初始化
子类 静态成员staticSamSub1初始化
子类 static 块  执行
                        -------子类静态成员初始化
父类 sam1成员初始化
父类 sam2成员初始化
父类 Test默认构造函数被调用       
                        -------父类普通成员初始化和构造函数执行
子类 sam1成员初始化
子类 sam2成员初始化
子类 TestSub 默认构造函数被调用
                        -------子类普通成员初始化和构造函数执行


由此得出Java初始化顺序结论:
1 继承体系的所有静态成员初始化(先父类,后子类)
2 父类初始化完成(普通成员的初始化-->构造函数的调用)
3 子类初始化(普通成员-->构造函数)


Java初始化顺序如图:


此外,要注意类初始化的时机,是在该类的成员被使用到的适合才会初始化。
样例代码:

public class Main {
	public static void main(String[] args) {
		System.out.println(Sub.x);	//不会引起Sub类的初始化,因为x是定义在Super类中的
		System.out.println(Sub.y);	//不会引起Sub类的初始化,因为y是常量
		System.out.println(Sub.z = 3);	//会引起Sub类的初始化
		System.out.println(Sub.samp);	//会引起interf接口的
	}
}

interface interf{
	Sample samp = new Sample("interf里面samp成员初始化");	//interface里面定义的只能为final量,不管有没有指出
	void func();
}

class Sample {
	Sample(String s) {
		System.out.println(s);
	}
	Sample() {
		System.out.println("Sample默认构造函数被调用");
	}
	@Override
	public String toString() {
		return "我是Sample对象";
	}
	
}

class Super {
	static int x = 1;	//static field

	// static初始化块
	static {
		System.out.println("This is Super static initializer");
	}
	
	public Super(){
		System.out.println("This is Super Constructor");
	}
}

class Sub extends Super implements interf{
	static final int y = 2;
	static int z;

	static {
		System.out.println("This is Sub static initializer");
	}
	
	public Sub(){
		System.out.println("This is Sub Constructor");
	}

	@Override
	public void func() {
		System.out.println("This is void fun()");
	}
}

输出:
This is Super static initializer
1
2
This is Sub static initializer
3
interf里面samp成员初始化
我是Sample对象


软件测试——白盒测试实验报告,输入年月日算星期几 软件测试——白盒测试实验报告,输入年月日算星期几,测试用例设计和结果展示 阅读详情

相关推荐

GNSS接收机性能测试指标详解:TTFF、位置精度、灵敏度等关键参数如何评估

本文详细解析了GNSS接收机性能测试的关键指标,包括首次定位时间(TTFF)、位置精度、灵敏度等,帮助工程师系统评估接收机性能。通过多频段协同定位和载波相位测试等技术,提升定位精度至亚米级。同时,介绍了灵敏度测试的极限挑战和授时精度的专业测试方案,为GNSS接收机的性能优化提供实用指导。

cuda7parallel的博客 964

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下: 1、首先加载要创建对象的类及其直接与间接父类。 2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。 3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。

664

Cadence 17.4 PSpice仿真555定时器输出方波

这里利用555定时器组成多谐振荡器产生1Hz的方波并用PSpice仿真其输出的方波波形。555定时器是一种广泛应用的中规模集成电路。根据其内部组成的不同,可分为双极型(555B)和CMOS型(555C)两类。两种类型的定时器各有所长。双极型定时器具有较大的驱动能力,其输出电流可达200mA,可直接驱动发光二级管、扬声器、继电器等负载。而CMOS型定时器的输入阻抗高、功耗低。

tj_nonstoper的博客 1万+

Java类和对象的初始化顺序

本文摘录于http://blog.youkuaiyun.com/socoolfj/archive/2006/05/23/750425.aspx,并修改例子的代码。   类装载步骤        在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化

z516518的专栏 394

【校招】SHL 的 General Ability (GA, 通用能力测试)

SHL 的 General Ability (GA, 通用能力测试) 文章目录SHL 的 General Ability (GA, 通用能力测试)1、归纳推理题1.1 圈圈线条推理1.2 图形颜色位置推理1.3 箭头指向推理2. 数字推理题攻略3. 语言推理题 1、归纳推理题   归纳推理题我把它总结为三种类型:圈圈线条推理;图形颜色位置推理;箭头指向推理。 1.1 圈圈线条推理   你别看这个题目看起来很复杂,其实很简单,而且这个题型的题目背后原理都一样!我把我的 tips 偷偷分享给你们嘿嘿~先从 A

Sunnyside_ 2万+

别再纠结了!实测罗技Flow、对拷线、微软Mouse without Borders,我的最终选择是...

本文通过实测对比罗技Flow、对拷线和微软Mouse without Borders等多设备控制方案,详细分析了各自的优缺点及适用场景。作者最终选择了对拷线与罗技键鼠的组合方案,为专业用户提供了稳定可靠的多设备协同办公解决方案,特别适合需要频繁传输大文件和跨设备操作的用户。

weixin_33696106的博客 408

7-2 jmu-Java-03面向对象基础-02-构造函数与初始化块 JAVA

1.定义一个Person类 属性:name(String)、gender(boolean)、age(int)、id(int) ,所有的变量必须为私有(private)。 无参构造函数:Person(), 功能:打印This is constructor 。 有参构造函数:Person(name, gender, age) ,功能:给属性赋值。 建议:使用Eclipse自动生成toString方法 2.定义类的初始化块 为Person类加入初始化块,在初始化块中对id属性赋值,并且要保证每次的值比上次创建的对

hidewnd的博客 1784

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

WW、forever的博客 1964

类里含有静态初始化对象的执行过程和顺序

今天在做牛客网上的题时,注意到了一个题是关于静态对象的初始化的问题 之前发现类加载的顺序是 : 父类的静态代码块和静态对象->子类的静态代码块和静态对象->父类非静态代码块和对象->父类构造函数->子类非静态代码块和对象->子类构造函数 今天做这个题时,立马根据上面的顺序排出掉A和B,结果查看答案瞬间傻眼了,于是就自己在eclipse测试了一下 实验代码: package com

cherry_chenrui的博客 915

【ESP32CAM+Android+OpenCV】自定义目标数据集、训练自己的OpenCV模型部署到手机APP并对ESP32CAM无线图传显示并实时检测识别目标_资料编号30

本项目实现自定义目标数据集(想检测什么就检测什么,按照本文教程自己来更换目标)、训练自己的OpenCV模型实时检测识别(pycharm工程)。手机APP(Android studio工程)部署OpenCV模型实现对ESP32CAM(arduino工程)无线WIFI图传过来的图像实时检测识别。 本文以火焰检测识别为例进行演示,通过该过程,结合本文可自定义尝试更换为其它目标的检测,例如更换为车辆、车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人、口罩、行为、水果、植物、农作物、建筑、损伤等等部署进行检测。

嵌入式阿齐Archie 3482

2026.3.13:docker compose运行了Milvus 6个月,占用磁盘近138GB的原因

Docker容器运行Milvus半年后占用138GB磁盘空间,主要原因是容器日志无限增长、容器内写入大量数据未挂载到数据卷,以及未清理临时文件。通过检查发现超大容器目录569035582ce3...占用主要空间。解决方案是使用truncate命令清空容器日志文件(*-json.log),释放磁盘空间。建议配置日志轮转机制,并将数据挂载到宿主机数据卷以避免类似问题。

拥抱具身智能,昇腾Ascend C 194

Java类的初始化顺序

我把Java类的初始化顺序分为两部分。第一部分是类的初始化,第二部分是对象的初始化。 在初始化之前JVM必须先把该类的字节码加载到内存中来。这时不管创不创建对象都会马上执行类的初始化: 执行静态初始化表达式(如static int a = 10)和静态初始化块(即static{}中的内容),注意两者按在源代码中的先后顺序执行。 当创建一个对象,就会执行对象的初...

weixin_30421525的博客 75

BW 技术 InfoObject 初始化,一次把 0LANGU、0CURRENCY、0IOBJNM 这些底座对象讲透

摘要:BW/4HANA和S/4HANA嵌入式分析中最容易被忽视的关键技术InfoObject(如0LANGU、0UNIT等)是系统运行的基础骨架。这些对象虽不直接涉及业务,但若未正确激活会导致多维分析、查询运行等核心功能异常。BW/4HANA中应通过任务清单SAP_BW4_SETUP_SIMPLE或SAP_BW4_SET_OPERATION_SCOPE激活,而非旧事务码RSTCO_ADMIN。S/4HANA嵌入式分析仍需依赖这些底层BW组件,配置需参考SAP Note 2636754。项目实践中需特别关注这

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1385

java 类初始化和加载顺序

java 类初始化和加载顺序 成员变量 (按照申明的顺序初始化)>> Constructor 方法(生成对象)>> @Autowired (注入对象)>> @PostConstruct (初始化方法,依赖于注入)

日日留心的技术专栏 199

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 对象、变量的存储及初始化

1. 参考 https://www.hollischuang.com/archives/2509 《Java编程思想》 2. Java内存结构 3. 各种数据存储在哪里 3.1基本类型 Java有9种基本类型(boolean,char,byte,short,int,long,float,double,void),存储在堆栈中,不用new来创建变量,而是创建一个并非是引用的“自动”变量 3.2 new出来的对象 存储在”堆“中 3.2.1 String String对象是不可变的 3

Clever99的博客 680

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java中初始块的执行顺序

在Java中除了使用构造器类对单个对象进行初始化操作外,我们还可以通过初始化块来实现。在一个类中可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化块后执行。使用static修饰的初始化块,称为静态初始化块,在初始化块中可以定义局部变量、调用其他对象的方法,以及使用分支、循环语句等。 静态初始化块: 执行优先级高于非静态的初始化块,它会在对象

LOU的专栏 1474

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java程序初始化的顺序以及遵循的三个原则

1.什么是程序初始化? 简单说就是把运行程序必须的资源加载到内存,为一些变量分配空间赋初值,如果编程者在初始化函数里定义了代码还会做一些自定义的事情。 2.Java程序初始化的遵循的三个原则? 以下三个原则优先级依次递减: 1、静态对象(变量)优先于非静态对象初始化,其中,静态对象(变量)只初始化一次,而非静态对象可以初始化多次。 2、父类优先于子类进行初始化 3、按照成员变量定义顺序进行初始化 3.Java程序初始化的顺序?按照下列数字顺序依次进行: 1.父类静态变量 ...

我的青春一去不复返 1193

12、Java对象初始化的顺序。

小景哥哥博客 Java对象初始化的顺序。 在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。 Java对象的初始化一般遵循三个原则(优先级依次递减)①静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次。②父类优于子类进行初始化。③按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们仍然在任何方法(包括构造函数)被调用之前先初始化。

JingLisen的博客 278

java笔记2——类与对象属性初始化

文章目录2.2 类与对象属性初始化2.2.1对象属性初始化2.2.2 类属性初始化 2.2 类与对象属性初始化 2.2.1对象属性初始化 声明的同时初始化 块初始化(声明后初始化) 通过构造方法初始化 package charactor; public class Hero { public String name = "some hero"; //声明该属性的时候初始化 protected float hp; float maxHP; {

ajream的博客 162

java 对象初始化顺序_Java对象初始化顺序(一)

偶尔翻到了关于Java对象初始化顺序的面试题,重新复习了一下,顺便做笔记。1.父类子类构造函数执行的先后顺序public classTest2 {public intField;//step 1publicTest2(){Field= 1;}}/*************************************************//*** 次类的目的仅是为了验证父类子类构造函数执行的...

weixin_36087895的博客 235

【JavaSE】【面向对象05】类的五大成员之代码块 & 属性初始化过程

类的成员之四:代码块 代码块的作用:一般来说是用于类或实例成员变量的初始化; 代码块有两种:分为静态代码块和非静态代码块(构造代码块) 1、静态代码块 (1)可以为类变量(静态的属性)初始化 (2)随着类的初始化而初始化,只执行一次 (3)如果子类初始化时,它的父类没有初始化会先初始化父类 (4)在静态代码块中不能访问非静态成员(属性、方法、内部类) (5)在静态代码块中不能使用this和super关键字 如果有重名问题,需要访问本类或父类的静态成员,那么可以使用“本类名.xx”、“父类名.xx” 如果没有

weixin_43589563的博客 284

java file 初始化_java类加载和对象初始化

对象初始化过程:1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法;Java类加载机制1.概述Class文件由类装载器装载后,在JVM中将形成一份描述Class...

weixin_31961675的博客 3092

java类的初始化顺序

这是所有情况的类初始化顺序,如果实际类中没有定义则跳过: 父类静态变量→父类静态代码块→子类静态变量→子类静态代码块→父类非静态变量→父类非静态代码块→父类构造函数→子类非静态变量→子类非静态代码块→子类构造函数。 创建对象的4种方法: 1.new一个对象 2.通过反射 3.clone生成 4.序列化生成 容易忘记clone生成 转载于:https://www...

dipianjiang7696的博客 94

关于c++中的类继承以及类初始化顺序

对于类以及类继承, 几个主要的问题: 1) 继承方式: public/protected/private继承. 这是c++搞的,实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可以把基类真实还原, 而private继承则完全把基类屏蔽掉.这种屏蔽是相对于对象层而言的, 就是说子类的对象完全看不到基类的方法, 如果继承方式是private的话,即使方法在基类中为public的

xiaohuima_dong的专栏 866

Java中对象属性的初始化顺序

1-对象属性的初始化方式有三种2-对象属性初始化的顺序3-类属性初始化方法有两种4-类属性的访问 在Java中用没有没关键字static修饰的属性叫对象属性,否则就叫类属性。 1-对象属性的初始化方式有三种 声明该属性的时候初始化 在构造方法中初始化 在初始化块中初始化 如下: public class Hero { public String name = "some hero"; //声明该属性的时候初始化 protected float hp; float maxHP; .

weixin_45436474的博客 983

JAVA对象和类

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。类与对象的关系就如模具和铸件的关系 ,类的实例化结果就是对象,而对一类对象的抽象就是类,类描述了一组有相同属性和相同方法的对象。在Java中,可以使用关键字new来创建类的实例对象。类是一个抽象的概念,它不存在于现实中的时间、空间里。对象是类的一个具体。①实例化对象时,成员变量初始化为默认值。②将成员变量赋为定义类时设置的初值。

2301_76381441的博客 104
上一篇: 常用算法五(分支限界法)
下一篇: C++ const的总结
ningzero123
博客等级 码龄14年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值