首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 編譯運行「找不到主類」疑難雜症:同目錄下多文件相互影響分析

     編輯:程式設計綜合問答

現象描述

在 A、B 兩個目錄下分別編寫 Test.java 與 test.java,編譯均成功。但運行時:A 目錄下 java Test 正常;B 目錄下 java test 提示「找不到主類 test」。刪除 A 目錄下的 Test.java 和 Test.class 後,B 目錄下 java test 又能正常運行。兩個目錄看似獨立,為何會相互干擾?

根因剖析

關鍵在於 classpath 包含當前目錄 (.) 以及 類名與文件名不一致:

  • test.java 中定義的類名可能不是 test(如 class Demo),且非 public。
  • 編譯時 javac test.java 產生 Demo.class,但運行 java test 會嘗試加載名為 test 的類,失敗。
  • 當 A 目錄存在 Test.class 時,classpath 掃描順序導致類加載器錯誤綁定,刪除後恢復正常。

解決方案

  1. 確保 文件名與 public 類名完全一致(大小写敏感)。
  2. 若類非 public,文件名可不同,但運行時需使用 完整類名(如 java Demo)。
  3. 規範項目結構:使用包名、建議用 IDE 管理編譯輸出目錄,避免源碼與 class 混雜。

最佳實踐

始終遵循「一個 public 類對應一個同名 .java 文件」,並在包結構下組織代碼,徹底杜絕此類路徑干擾問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved