[英]Initialisation of Static variables in java
我在接受采訪時被問到這個問題
如果你這樣做,
private int c = d;
private int d;
它會導致編譯時錯誤
在定義之前無法引用字段。
來到面試問題,
1 public static int a = initializeStaticValue();
2 public static int b = 20;
3 public static int initializeStaticValue() {
4 return b;
}
5 public static void main(String[] args) {
System.out.println(a);
System.out.println(b);
}
我給相同的響應作為a
被通過到其被引用未定義的值initializeStaticValue()的調用初始化b
。
但程序運行正常,編譯和打印
0
20
我很困惑為什么
Cannot reference a field before it is defined.
沒被拋出。
其次,當我調試它時,為什么控制着陸
3 public static int initializeStaticValue() {
我的意思是,為什么這是該計划的起始位置。
如果你擔心初始化/執行的順序,那么將會發生什么(我相信它不是很准確,只是給你一個想法):
Foo
,它嘗試從類路徑加載Foo
類 Foo
,靜態變量分配默認值 (0表示int) initializeStaticValue()
返回的值b
在這個時刻(0),並將其分配給a
b
分配20。 Foo
已成功加載和初始化,JVM調用Foo.main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.