public class C{
static C c=new C();
public C(){
}
{
System.out.println("普通代码块");
}
static{
System.out.println("静态代码块。");
}
}
答案:
普通代码块
静态代码块。
普通代码块
public class C{
static C c=new C();
public C(){
}
{
System.out.println("普通代码块");
}
static{
System.out.println("静态代码块。");
}
}
答案:
普通代码块
静态代码块。
普通代码块
我的理解如下:(前提是你做测试调用这个类是用’new C()形式’):
当你在测试用new C()时,
首先执行的是静态属性,这时候你的静态属性是new C(),所以在你静态属性这一档 就需要执行一次代码块。但这时候并不执行静态代码块(因为静态代码块只会执行一次啊,你在写测试new C()时已经"预支了")。
然后执行的是 静态代码块 第三执行的就是普通代码块。至此你的测试代码中的new C()执行完毕。
所以当你运行new C() 类的加载顺序是:
静态属性【静态属性的new-->普通属性-->普通代码块】-->静态代码块-->你测试写的那个new-->普通属性-->普通代码块