静态代码块为什么比普通代码块后执行,求大牛解答

public class C{
static C c=new C();
public C(){

}
{
    System.out.println("普通代码块");
}
static{
    System.out.println("静态代码块。");
}

}
答案:
普通代码块
静态代码块。
普通代码块

2个回答

我的理解如下:(前提是你做测试调用这个类是用’new C()形式’):

当你在测试用new C()时,
首先执行的是静态属性,这时候你的静态属性是new C(),所以在你静态属性这一档 就需要执行一次代码块。但这时候并不执行静态代码块(因为静态代码块只会执行一次啊,你在写测试new C()时已经"预支了")。
然后执行的是 静态代码块 第三执行的就是普通代码块。至此你的测试代码中的new C()执行完毕。

所以当你运行new C() 类的加载顺序是:

静态属性【静态属性的new-->普通属性-->普通代码块】-->静态代码块-->你测试写的那个new-->普通属性-->普通代码块

canfly666
canfly666 new C()时已经"预支了" 请问下老哥这句话什么意思啊?
2 个月之前 回复
qq_33727653
砸死接触 哪里哪里,我学的也是半斤八两!!
大约 3 年之前 回复
xiaoxiaohu_Hello
xiaoxiaohu_Hello 谢谢大牛
大约 3 年之前 回复

一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化,,,额,,才看到,楼上已经说得很明白了,,,

xiaoxiaohu_Hello
xiaoxiaohu_Hello new 类之前就会将该类静态代码加载到虚拟机中,静态代码属于类,只执行一次,我也搞懂了,好开心啊,真不容易,谢谢
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐