Java类初始化顺序_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java类初始化顺序

Java类初始化顺序

 2016/5/12 5:33:44  无量  程序员俱乐部  我要评论(0)
  • 摘要:packagecom.tongbanjie.trade.test.base;publicclassSonextendsFather{privatestaticMemberstaticMember=newMember("子类静态成员变量初始化");privateMembermember=newMember("子类普通成员变量初始化......");static{System.out.println("子类静态代码块一....开始执行......");}Son(Stringaa){System
  • 标签:Java 初始化顺序
class="java" name="code">package com.tongbanjie.trade.test.base;

public class Son extends Father{
	
	private static Member staticMember = new Member("子类静态成员变量初始化");
	
	private Member member = new Member("子类普通成员变量初始化......");

	static {
		System.out.println("子类静态代码块一....开始执行......");
	}
	
	Son(String aa) {
		System.out.println("子类构造方法开始执行......");
	}
	
	static {
		System.out.println("子类静态代码块二....开始执行......");
	}
	
	
	public static void main(String[] args) {
		new Son("aa");
	}
}


package com.tongbanjie.trade.test.base;

public class Father {
	
	private static Member staticMember = new Member("父类静态成员变量初始化......");
	
	private Member member = new Member("父类普通成员变量初始化......");

	static {
		System.out.println("父类静态代码块开始执行......");
	}
	
	Father() {
		System.out.println("父类无参构造方法开始执行.......");
	}
	
	Father(String aa) {
		System.out.println("父类有参构造方法开始执行......");
	}
}


package com.tongbanjie.trade.test.base;

public class Member {

	Member() {
		System.out.println("Member 默认构造方法开始执行.......");
	}
	
	Member(String str) {
		System.out.println(str);
	}
}


执行结果如下图:



分析结果可以知道
先执行父类静态代码区域(静态代码块和静态常量顺序执行),
再执行子类静态代码区域,
再执行父类普通成员变量,
再执行父类无参构造函数
再执行子类普通成员变量,
再执行子类构造函数


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


图示初始化顺序:


  • 大小: 8 KB
  • 大小: 38.1 KB
  • 查看图片附件
发表评论
用户名: 匿名