Java codeprivate static zz m=new zz();
private static int a=0;
private zz(){
a=5;
}
Java code
private static int a=0;
private static zz m=new zz();
private zz(){
a=5;
}
为什么顺序变后值也变了 请说下它们内部的机制
答:这是由于楼主对编译器内部是如何处理代码的过程不是很清楚.
其实在编译时,编译器是对你的JAVA代码进行了"代码迁移".
如:代码:
private static zz m=new zz();
private static int a=0;
private zz(){
a=5;
}
编译后"代码迁移"变成:
private static zz m; //类装载到内存时自动初始化成null
private static int a; //类装载到内存时自动初始化成0
private zz(){
a=5;
}
static{//这是编译器自动生成的类的初始化块,即:static{...}代码块
m=new zz(); //按你定义的顺序,代码迁移到这儿!
a=0;//按你定义的顺序,代码迁移到这儿!
}
执行时,首先类装入内存,(此时先将类中的static数据成员自动初始化成各自的默认值)
然后执行那个static{...}块,即依次执行类的初始化块中JAVA语句.
然后,...下边的过程大家都知道的.我就不打字了.
静态变量 编译器处理
最新推荐文章于 2021-08-18 17:45:25 发布