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;
}
}
里面存放了一些靜態變量。
調用類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);
結果:result1----:-2.8
result2----:17.2
為什么會輸出-2.8
原因如下:
在Java對靜態類的初始化的時候是分為一下兩個階段:
1)系統為類里面的靜態變量分配內存空間。
2)按初始化的代碼編寫順序對類變量執行初始化。
所以在上面的代碼里面的類初始化過程中。首先會為myNumber和value先分配內存空間,并賦默認初始值null和0.0。緊接著,程序按順序依次為上述的變量賦值。
這時執行到public static MyNumber myNumber=new MyNumber(2.8);這段代碼。
然后就去執行構造函數MyNumber(2.8),注意,這時因為value還是0.0,所以執行完構造函數之后,currentvalue=0-2.8=-2.8。
然后程序繼續執行private static double value=20;,所以,以后value=20了,回到客戶端繼續執行,下次打印currentValue就是17.8了。
如果:private static double value=20;
public static MyNumber myNumber=new MyNumber(2.8);
即我們調換value和myNumber的順序。
結果:result1----:17.2
result2----:17.2
這充分驗證Java類中靜態變量的初始化順序的問題。
總結
以上是生活随笔為你收集整理的java类变量什么时候初始化_Java类变量的初始化时机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下挂载samba服务器,Lin
- 下一篇: java敏感异常是什么_java中的异常