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

Class.forName同包下一個類找不到另一個卻能找到:類加載器緩存與編譯輸出目錄不一致

     編輯:程式設計綜合問答

現象

同包下Class.forName("Employee")拋ClassNotFoundException,但新建TempTest同樣代碼卻能加載成功。

可能原因

  1. 類文件未編譯/編譯輸出目錄錯誤:Employee.class未生成在Classpath指定目錄(如bin/、target/classes/)。
  2. 包名聲明缺失/不匹配:Employee.java首行無package com.xxx;或與目錄結構不符。
  3. IDE緩存/增量編譯失效:Eclipse/MyEclipse嘗試Project → Clean、刪除.metadata/.plugins/org.eclipse.jdt.core重啟。
  4. 類加載器隔離:Web應用中WEB-INF/classes vs 共享庫不同加載器,但同包同模塊通常不會。

排查步驟

  1. 檢查Employee.class物理存在:ls -la bin/com/xxx/Employee.class。
  2. 運行時打印Classpath:System.out.println(System.getProperty("java.class.path"))。
  3. 用javap -verbose Employee.class驗證類文件完整性。
  4. 對比TempTest與Employee的編輸出路徑差異。

最佳實踐

  • 構建工具(Maven/Gradle)管理編譯輸出,避免IDE耦合。
  • 動態加載優先用Thread.currentThread().getContextClassLoader().loadClass()。
  • 異常捕獲打印e.getMessage()與堆棧,而非只看「找不到」。

回答者註

原帖提到「C幣可以幹嘛?」疑似誤發/刷屏,非技術內容。

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