一、illegal forward refrence
前天寫一個類時遇到一個很眼生的編譯錯誤(問題簡化后):
1
punlic final class Constants
{
2
public static int VAR2 = VAR1 + 1;
3
public static int VAR1 = 1;
4
}



2

3

4

編譯時出錯(第2行):
illegal forward refrence
仔細一想,是因為VAR2引用的VAR1在VAR2之后定義,看來在Java中定義static變量時應遵循“聲明先于使用”的原則。
二、static塊
還是上一個類,VAR1和VAR2定義成final,值存在一個properties文件中,在使用前必須將值load進來:
System.getProperties().load(new FileInputStream("constants.properties"));
于是將上面的代碼放在static塊中:















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