类的初始化顺序

1 对于继承来讲,初始化次序大致如下:

1)父类的静态变量和静态块。父类的静态变量和静态块的初始化次序是按代码次序执行。

2)子类的静态变量和静态块。子类的静态变量和静态块的初始化次序同父类。

3)父类的非静态变量和非静态块。他们之间初始化次序按代码次序执行。此时如果对象中所有的非静态变量和非静态块没有直接赋值,将执行默认的初始化。(其中非静态变量包括基本类型的变量和对象的引用)

4)父类的构造函数。调用构造函数时,会对实例变量进行初始化。

注意:1), 2)无论类是否产生对象,他们都回执行初始化;3),4)产生对象后才会执行。

5)子类的非静态变量和非静态块。他们之间初始化次序按代码次序执行。

6)子类的构造函数。参考4)

 

2 参考代码:

class Baseclass{
	// 父类静态变量
	private static int x1 = 
		printInit("父类静态变量");
	
	// 父类 静态块
	static{
		printInit("父类 静态块");
	}


	// 父类非静态变量
	private int i = printInit("父类非静态变量");
	
	// 父类非静态块
	{
		print("父类非静态块");
	}
	// 父类构造函数
	Baseclass(){
		print("父类构造函数");
		i = 39;
	}

	static int printInit(String s){
		print(s);
		return 47;
	}
	
	// Print with a newLine:
	static void print(Object obj){
		System.out.println(obj);
	}
	
}
public class Subclass extends Baseclass{
	// 子类静态变量
	private static int x2 = 
		printInit("子类静态变量");
	
	// 子类 静态块
	static{
		printInit("子类 静态块");
	}


	// 子类非静态变量
	private int j = printInit("子类非静态变量");
	
	// 子类非静态块
	{
		print("子类非静态块");
	}
	// 子类构造函数
	Subclass(){
		print("子类构造函数");
		j = 39;
	}
	public static void main(String[] args) {
		Subclass s = new Subclass();
	}
}

 3 代码或者概念解释不清楚的地方,请热心的读者积极指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值