`

关于代码执行顺序

阅读更多
很多时候我觉得我的基础也还可以了,但是感觉还不够,下面是我被面试的一个面试题目,我稍微改了下的。


有三个类,b类继续a类,c类似被a类引用。


public class A {
	private C c=new C();
	A(){
		System.err.println("A1");
	}
	
	
	{
		System.err.println("A2");
	}
	
	static{
		System.err.println("A3");
	}
	
	private C c2=new C();

}


public class B  extends A{
	B(){
		System.err.println("B1");
	}
	
	{
		System.err.println("B2");
	}
	
	static{
		System.err.println("B3");
	}
	 public static void main(String[] args) {
		 B a=new B();
	 }

}


public class C {
	C(){
		System.err.println("C");
	}

}



运行b类的main方法,结果是什么呢?












结果是:
A3
B3
C
A2
C
A1
B2
B1



大家知道这是为什么吗?
0
6
分享到:
评论
3 楼 huangyunbin 2013-05-22  
呵呵 muyishuihan说的很清楚明白啊。估计你应付这样的面试是没问题了。呵呵
2 楼 muyishuihan 2013-05-21  
初始化顺序:

父类静态变量,静态初始化块
子类静态变量,静态初始化块
父类变量,初始化块
父类构造器
子类变量,初始化块
子类构造器

变量和初始化块顺序视位置而定
1 楼 jinnianshilongnian 2013-05-21  
《深入Java虚拟机》 对这块讲的很清楚

相关推荐

Global site tag (gtag.js) - Google Analytics