程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> static與final變量

static與final變量

編輯:關於JAVA

一、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塊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved