簡體   English   中英

在java中初始化靜態變量

[英]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() {

我的意思是,為什么這是該計划的起始位置。

如果你擔心初始化/執行的順序,那么將會發生什么(我相信它不是很准確,只是給你一個想法):

  1. 要求JVM運行Java應用程序(假設您的類已命名) Foo ,它嘗試從類路徑加載Foo
  2. 加載Foo ,靜態變量分配默認值 (0表示int)
  3. 靜態初始化將被執行,第一運行在第1行,后者又調用initializeStaticValue()返回的值b在這個時刻(0),並將其分配給a
  4. 靜態初始化繼續,並且到達第2行。它為b分配20。
  5. Foo已成功加載和初始化,JVM調用Foo.main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM