爲什麼這段代碼編譯?
class Compiles {
public final static int A = 7/0;
public final static int B = 10*3;
public static void main(String[] args) {}
}
如果我看看編譯後的類文件,我可以看到B被評估爲30,而A仍然是7/0。
就我所瞭解的JSL而言,除以零的表達式不是常數。
我的上述說法是由於這一行:
編譯時常量表達式是表示原語類型的值
因此通過將表達式零不計算爲原始值。
我真的不明白爲什麼編譯器允許這個呢?只是要清楚,我的代碼崩潰與運行時「java.lang.ExceptionInInitializerError」
在我看來,編譯器威脅任何最終的靜態變量作爲常量,並評估它的編譯時間。這意味着編譯器已經試圖評估A,但由於它是一個零分區,它只是讓它通過。沒有編譯時錯誤。但是,這看起來非常奇怪......編譯器知道它被零除,並且它會使運行時崩潰,但它不會標記編譯錯誤!
任何人都可以向我解釋爲什麼?
是否有任何除零生成編譯時錯誤的實例?如果你在正常的程序代碼中被零除,你會在運行時得到一個`ArithmeticException`,所以我也沒有看到這個通過編譯器的事情。 – BoltClock 2011-02-12 20:20:02