前天寫一個類時遇到一個很眼生的編譯錯誤(問題簡化后):
編譯時出錯(第2行):
illegal forward refrence
仔細一想,是因為VAR2引用的VAR1在VAR2之后定義,看來在Java中定義static變量時應遵循“聲明先于使用”的原則。
還是上一個類,VAR1和VAR2定義成final,值存在一個properties文件中,在使用前必須將值load進來:
System.getProperties().load(new FileInputStream("constants.properties"));
于是將上面的代碼放在static塊中:
但在運行時VAR1和VAR2沒有被賦值,debug后發現static塊根本沒有執行。于是頓悟:final變量在編譯時便被編譯器計算、賦值,因此在運行時沒有必要執行static塊。