http://ini.iteye.com/blog/2007835
public class TestStaticCon {
public static int a = 0;static {
a = 10;
System.out.println("父类的静态代码块在执行a=" + a);
}
{
a = 8;
System.out.println("父类的非静态代码块在执行a=" + a);
}
public TestStaticCon() {
this("父类带参构造方法中a的值:" + TestStaticCon.a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
}
public TestStaticCon(String n) {
System.out.println(n);
System.out.println(a);
}
public static void main(String[] args) {
TestStaticCon tsc = null ;
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
tsc = new TestStaticCon();
}
}
结论:静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。且执行顺序为静态代码块------非静态代码块----构造函数。
本文详细解析了Java类加载时静态代码块、非静态代码块及构造函数的执行顺序,通过实例展示了静态代码块在类加载时执行,而非静态代码块在创建对象时执行,并阐述了构造函数的调用过程。

被折叠的 条评论
为什么被折叠?



