Java类及对象的初始化顺序

1.初始化规则:

下面规则优先级从前往后依次降低

①.加载一个类时先加载初始化基类后加载初始化扩展类;

②.类的初始化高于实例的初始化:

类的初始化依靠(静态代码块static{....})以及(静态变量)这些用于初始化类的代码只会被加载执行一次;

对象的初始化依靠实例成员变量、实例代码块{...}、构造方法,这些在对象每次被创建时都要执行一次;

③.变量声明执行优先级高于代码块执行,代码块高于构造函数;

④.声明顺序和执行顺序一致;

2.测试性代码

public class DemoTest {
	public static void main(String[] args) throws ClassNotFoundException {
		DemoBase obj1 = new DemoBaseExtends();
		DemoBase obj2 =  new DemoBaseExtends();
		obj1.toString();
		obj2.toString();
	}
	
}
class DemoBase{
	
	static{
		System.out.println("DemoBase static called1");
		i = 1;
	}
	{
		System.out.println("DemoBase object called1");
	}
	public DemoBase() {
		System.out.println("DemoBase constu called");
	}
	{
		System.out.println("DemoBase object called2");
	}
	static{
		System.out.println("DemoBase static called2");
		i = 1;
	}
	
	static final String str = "qwer";
	static int i;
}
class DemoBaseExtends extends DemoBase{
	String name = null;
	static{
		System.out.println("DemoBaseExtends static called1");
	}
	{
		System.out.println("DemoBaseExtends Object called1");
		name = "DemoBaseExtends";
	}
	public DemoBaseExtends() {
		super();
		System.out.println("DemoBaseExtends constu called");
	}
	{
		System.out.println("DemoBaseExtends Object called2");
	}
	static{
		System.out.println("DemoBaseExtends static called2");
	}
}
输出顺序如下:
DemoBase static called1
DemoBase static called2
DemoBaseExtends static called1
DemoBaseExtends static called2
DemoBase object called1
DemoBase object called2
DemoBase constu called
DemoBaseExtends Object called1
DemoBaseExtends Object called2
DemoBaseExtends constu called
DemoBase object called1
DemoBase object called2
DemoBase constu called
DemoBaseExtends Object called1
DemoBaseExtends Object called2
DemoBaseExtends constu called

##3.汇总

基类静态变量(按声明顺序)=》

基类静态代码块(按声明顺序)=》

扩展类静态变量(按声明顺序)=》

扩展类静态代码块(按声明顺序)=》

基类实例变量(按声明顺序)=》

基类实例代码块(按声明顺序)=》

基类构造函数(按调用顺序)=》

扩展类实例变量(按声明顺序)=》

扩展类实例代码块(按声明顺序)=》

扩展类构造函数(按调用顺序)

转载于:https://my.oschina.net/Aruforce/blog/1615123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值