java类变量什么时候初始化_Java类变量的初始化时机
先上代碼
測試類public class MyNumber {
public static MyNumber myNumber=new MyNumber(2.8);
private static double value=20;
public double currentvalue;
public MyNumber(double number){
currentvalue=value-number;
}
}
里面存放了一些靜態(tài)變量。
調(diào)用類double result1= MyNumber.myNumber.currentvalue;
Log.d("TAG","result1----:"+result1);
MyNumber myNumber=new MyNumber(2.8);
double result2=myNumber.currentvalue;
Log.d("TAG","result2----:"+result2);
結(jié)果:result1----:-2.8
result2----:17.2
為什么會(huì)輸出-2.8
原因如下:
在Java對靜態(tài)類的初始化的時(shí)候是分為一下兩個(gè)階段:
1)系統(tǒng)為類里面的靜態(tài)變量分配內(nèi)存空間。
2)按初始化的代碼編寫順序?qū)︻愖兞繄?zhí)行初始化。
所以在上面的代碼里面的類初始化過程中。首先會(huì)為myNumber和value先分配內(nèi)存空間,并賦默認(rèn)初始值null和0.0。緊接著,程序按順序依次為上述的變量賦值。
這時(shí)執(zhí)行到public static MyNumber myNumber=new MyNumber(2.8);這段代碼。
然后就去執(zhí)行構(gòu)造函數(shù)MyNumber(2.8),注意,這時(shí)因?yàn)関alue還是0.0,所以執(zhí)行完構(gòu)造函數(shù)之后,currentvalue=0-2.8=-2.8。
然后程序繼續(xù)執(zhí)行private static double value=20;,所以,以后value=20了,回到客戶端繼續(xù)執(zhí)行,下次打印currentValue就是17.8了。
如果:private static double value=20;
public static MyNumber myNumber=new MyNumber(2.8);
即我們調(diào)換value和myNumber的順序。
結(jié)果:result1----:17.2
result2----:17.2
這充分驗(yàn)證Java類中靜態(tài)變量的初始化順序的問題。
總結(jié)
以上是生活随笔為你收集整理的java类变量什么时候初始化_Java类变量的初始化时机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下挂载samba服务器,Lin
- 下一篇: java class isassigna