現象描述
HelloWorld 可正常編譯運行,但下載的 Demo 報錯,源碼下載鏈接:https://download.csdn.net/detail/zhuifeng20008/9439664
核心問題與修復
- 源文件編碼不一致
現象:中文註釋/字串顯示亂碼,編譯器讀取錯誤字節導致語法錯誤。
修復:在 IDE 中新建同名文件,將原內容複製粘貼到新文件(新文件編碼為項目默認 UTF-8/GBK),覆蓋原文件。
- 代碼語法錯誤
原碼:public static Vector clients=new Vector() (Java 7+ 需泛型)
修復:public static Vector<Client> clients = new Vector<>(); 或至少 `
- 包結構與編譯命令不匹配
源碼包結構:`cn.com.SocketTest`,文件位於 `cn/com/SocketTest.java`。
正確編譯運行流程(在項目根目錄下):
# 1. 編譯:-d . 表示輸出到當前目錄,保持包結構
javac -d . cn/com/*.java
# 2. 運行:使用全限定類名
java cn.com.SocketTest
常見誤區
- 在 `cn/com` 目錄下執行 `javac *.java` 再 `java SocketTest` → 找不到主類(缺少包前綴)。
- 忽略 `-d` 參數導致 class 文件生成在源碼目錄,包結構混亂。
- 類路徑 (`-cp`) 未包含依賴的第三方 jar 包。
完整排查清單
- 檢查文件編碼(IDE 右下角/屬性)。
- 檢查 `package` 聲明與目錄結構一致。
- 檢查 `import` 的類是否在 classpath 中。
- 使用 `javac -Xlint:unchecked -encoding UTF-8 ...` 開啟警告與指定編碼。
- 確認 `main` 方法簽名:`public static void main(String[] args)`。
總結
Java 編譯運行核心在於:**編碼一致、包目錄對應、類路徑完整、命令正確**。遇到陌生 Demo 先在 IDE 中導入項目(Maven/Gradle/Eclipse),讓 IDE 自動處理編碼與路徑,再考慮命令行構建。