編譯報錯 在類 Person 中找不到主方法,實際 main 定義在 StaticDemo 中。
原始碼將 class Person 定義在 class StaticDemo 內部(巢狀類別),導致編譯器將 StaticDemo 視為包含 main 的頂層類別,但 Person 成為非靜態內部類,無法直接執行。
// 錯誤:Person 定義在 StaticDemo 內部
class StaticDemo {
public static void main(String[] args) { Person.show(); }
class Person { // 非靜態內部類
static String country = "CN";
public static void show() { System.out.println(country + ":"); }
}
}
// 正確:兩個獨立頂層類別 (同一文件或不同文件)
class StaticDemo {
public static void main(String[] args) {
Person.show();
}
}
class Person { // 頂層類別
static String country = "CN";
public static void show() {
System.out.println(country + ":");
}
}
.java 檔案最多一個 public 頂層類別,檔名必須與該類別名相同。main 方法必須在頂層類別中,或靜態內部類中(但入口點仍需頂層類別)。Extract Class / Move Class 可快速分離巢狀類別。類別定義層級錯誤是 Java 新手高頻問題,養成「頂層類別獨立定義、內部類別明確標註 static」習慣即可避免。