初學者最常見的挫折:javac HelloWorld.java 編譯通過,java HelloWorld 卻報 「找不到或無法加載主類」。本文整理 5 步排查法 + 標準環境變量配置,一次解決所有路徑/包名/版本問題。
D:\code> javac HelloWorld.java // 正常生成 HelloWorld.class D:\code> java HelloWorld 錯誤: 找不到或無法加載主類 HelloWorld
源碼第一行若有 package com.xxx;,類的完整名稱變為 com.xxx.HelloWorld,運行時必須:
# 方案 A:去掉 package 行 (練習階段推薦) # 方案 B:按包結構放置並用全限定名運行 D:\code> mkdir -p com/xxx D:\code> mv HelloWorld.java com/xxx/ D:\code> javac com/xxx/HelloWorld.java D:\code> java com.xxx.HelloWorld # 注意用點分隔,且在根目錄執行
環境變量 CLASSPATH 必須包含 . (代表當前目錄):
CLASSPATH=.;C:\Java\jdk1.8\lib\dt.jar;C:\Java\jdk1.8\lib\tools.jar
Windows 下分號
;分隔,Linux 用冒號:。.必須在最前面,否則同目錄下的類找不到。
D:\code> java -version java version "1.8.0_101" D:\code> javac -version javac 11.0.2 <-- 版本不同!
解決:調整 Path 變量順序,將 %JAVA_HOME%\bin 移到最前,確保同一 JDK。
| 錯誤寫法 | 正確寫法 | 說明 |
|---|---|---|
java HelloWorld.class | java HelloWorld | 運行時不加 .class |
java D:\code\HelloWorld | cd D:\code && java HelloWorld | 不要帶路徑,帶包名用點 |
javac HelloWorld | javac HelloWorld.java | 編譯必須加 .java |
# 系統變量 JAVA_HOME=C:\Program Files\Java\jdk-17 PATH=%JAVA_HOME%\bin;%PATH% CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar # JDK 9+ 可省略 dt/tools.jar # 驗證 java -version javac -version echo %JAVA_HOME%
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # JDK 9+ 只需 export CLASSPATH=.
@echo off echo === Java 版本 === java -version javac -version echo. echo === 環境變量 === echo JAVA_HOME=%JAVA_HOME% echo PATH=%PATH% echo CLASSPATH=%CLASSPATH% echo. echo === 當前目錄文件 === dir *.java *.class pause
cd 到該目錄直接 javac xxx.java && java xxxmvn exec:java 或 IDE 運行,完全屏蔽 classpath 細節package 聲明與目錄結構是否對應,90% 是這問題終極建議:別在 CMD 死磕環境變量。裝 IntelliJ IDEA Community (免費) 或 VS Code + Extension Pack for Java,新建 Maven 項目,右鍵 Run 即可。工具鏈成熟後,再回頭理解底層機制,事半功倍。