静态变量 编译器处理



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语句.
然后,...下边的过程大家都知道的.我就不打字了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值