static與final變數

來源:互聯網
上載者:User
變數
一、illegal forward refrence

前天寫一個類時遇到一個很眼生的編譯錯誤(問題簡化後):

punlic final class Constants{

  public static int VAR2 = VAR1 + 1;

  public static int VAR1 = 1;

}

編譯時間出錯(第2行):

illegal forward refrence

仔細一想,是因為VAR2引用的VAR1在VAR2之後定義,看來在Java中定義static變數時應遵循“聲明先於使用”的原則。



二、static塊

還是上一個類,VAR1和VAR2定義成final,值存在一個properties檔案中,在使用前必須將值load進來:

System.getProperties().load(new FileInputStream("constants.properties"));

於是將上面的代碼放在static塊中:

punlic final class Constants{

  static{

    System.getProperties().load(new FileInputStream("constants.properties"));

  }



  public static final int VAR2 = System.getProperties().getProperty("var2");

  public static final int VAR1 = System.getProperties().getProperty("var1");

}

但在運行時VAR1和VAR2沒有被賦值,debug後發現static塊根本沒有執行。於是頓悟:final變數在編譯時間便被編譯器計算、賦值,因此在運行時沒有必要執行static塊。


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。