一個 .java 源文件最多只能包含一個 public 級別的頂層類(頂層類指非內部類),且該類的類名必須與文件名完全一致。 除此之外,文件中可以包含任意數量的非 public 類(默認包訪問權限)、內部類、嵌套類、枚舉、介面等。
// File: Main.java
public class Main { } // 唯一的 public 頂層類,文件名匹配
class Helper { } // 包私有類,無數量限制
class Util { } // 另一個包私有類
// 內部類、嵌套類、枚舉、介面均不受限制
class Outer {
class Inner { }
static class Nested { }
}
enum Status { OK, FAIL }
interface Callback { void run(); }
// File: Main.java
public class Main { }
public class Another { } // 編譯錯誤:The public type Another must be defined in its own file
| 場景 | 建議做法 |
|---|---|
| 輔助類僅在本文件使用 | 定義為包私有類(無修飾符)或 private static 嵌套類 |
| 輔助類需跨文件復用 | 獨立為單獨 .java 文件,聲明為 public |
| 邏輯緊密關聯的小類 | 使用 static 嵌套類或內部類封裝 |
| 枚舉、介面 | 通常獨立文件,若極簡單可放在相關類文件中 |
記住鐵律:一個 .java 文件 = 至多一個 public 頂層類 + 文件名必須匹配。其他類型(包私有類、內部類、枚舉、介面)隨意放。遵循「高內聚、低耦合」原則,該拆文件時果斷拆分,代碼結構會更清晰、編譯更快、維護更易。