編碼時,我遇到了一個奇怪的Java編譯器行爲。Java編譯器錯誤益智遊戲:「內部類不能有靜態聲明」 - 除了簡單類型
編譯類(源代碼如下)時,編譯器會在NULL類變量上發出錯誤(「inner classes cannot have static declarations
」)。這是預期的!
但是,ZERO類變量沒有生成錯誤。這我不明白!
爲什麼這種差異,它似乎允許內部類中的簡單類型的靜態聲明,但不允許對象。
器(javac -version:1.6.0_24)
public class Outer {
public static final Runnable HELLO = new Runnable() {
// No compiler error
public static final int ZERO = 0;
// Causes compiler error: "inner classes cannot have static declarations"
public static final Object NULL = null;
@Override
public void run() {
System.out.println("Hello " + ZERO + NULL);
}
};
}
我認爲這是因爲priomitive變量將被視爲一個常量和編譯的* inline *,而'Object'引用不會。我記得在這個YouTube視頻中看到了一些關於編譯器如何處理帶有'null'參數的常量:http://www.youtube.com/watch?v=V1vQf4qyMXg&t=68m1s – Magicode
無論是空引用還是「新對象()「引用沒有區別,都會導致編譯器錯誤。 – Morten