码迷,mamicode.com
首页 > 编程语言 > 详细

java类的初始化顺序

时间:2016-10-28 20:19:40      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:border   初始化顺序   display   pad   静态代码块   ext   com   ide   nal   

方便查看初始化顺序,使用了下面的打印类

public class Print {
	
	public Print(String str){
		System.out.println(str);
	}

}

本文讨论两种情况下类的初始化顺序,分别是单独类的初始化,和有继承关系的类的初始化

1.单独类的初始化

以下面的代码为例

public class Father {
	
	static {
		System.out.println("Father 静态代码块");
	}
	
	public static Print fatherStaticPrint = new Print("Father 静态变量");
	
	public Print fatherPrint = new Print("Father 非静态变量");
	
	public Father(){
		System.out.println("Father 构造函数");
	}

	@Override
	protected void finalize() throws Throwable {
		super.finalize();
		System.out.println("Father 析构函数");
	}
		
}

在main函数当中初始化

public static void main(String args[]){
		Father father = new Father();
		System.runFinalizersOnExit(true); 
}

执行的结果如下

技术分享

 

如果将Father类的静态代码块和静态变量位置变换一下,如下所示

public class Father {
	
	public static Print fatherStaticPrint = new Print("Father 静态变量");
	
	static {
		System.out.println("Father 静态代码块");
	}
	
	public Print fatherPrint = new Print("Father 非静态变量");
	
	public Father(){
		System.out.println("Father 构造函数");
	}

	@Override
	protected void finalize() throws Throwable {
		super.finalize();
		System.out.println("Father 析构函数");
	}
		
}

那么执行的结果就变成

技术分享

因此可以得出结论:静态代码块和静态变量的优先级是一样的,谁排在前面就先初始化谁。

具体过程如下图所示:

技术分享

 

2.有继承关系的类的初始化

以下面的类为例

public class Son extends Father {
	
	static {
		System.out.println("Son 静态代码块");
	}
	
	public static Print SonStaticPrint = new Print("Son 静态变量");
	
	public Print SonPrint = new Print("Son 非静态变量");
	
	public Son(){
		System.out.println("Son 构造函数");
	}	
	
	@Override
	protected void finalize() throws Throwable {
		super.finalize();
		System.out.println("Son 析构函数");
	}

}

类Son继承类Father,在Main函数当中初始化Son,执行结果如下

技术分享

因此可以得出如下结论:

技术分享

java类的初始化顺序

标签:border   初始化顺序   display   pad   静态代码块   ext   com   ide   nal   

原文地址:http://www.cnblogs.com/huangbei1990/p/6008969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!