執行 java Hello 時拋出 Error: Could not find or load main class,初學者常誤以為是環境變量配置錯誤。實則 java 和 javac 能正常運行即證明環境變量無誤,classpath 甚至可不配置。
# 錯誤 java Hello.java java Hello.class # 正確 java Hello
原因:java 命令參數是全限定類名,而非文件名。
# 源文件 H:\code\Hello2.java
package com.example;
public class Hello2 { ... }
錯誤運行:
H:\code> javac Hello2.java H:\code> java Hello2 # Error: Could not find or load main class Hello2
# 1. 調整文件位置 H:\code\com\example\Hello2.java # 2. 在項目根目錄編譯 H:\code> javac com/example/Hello2.java # 3. 在項目根目錄運行(使用全限定名) H:\code> java com.example.Hello2
# 正確指定 classpath 為項目根目錄 java -cp H:\code com.example.Hello2
如類名為 HelloWorld 卻執行 java helloworld。
javac 編譯生成 .class 文件,目錄結構必須與 package 聲明一致。java 啟動 JVM,從 classpath 根路徑開始,按包名路徑查找 .class 文件,讀取 main 方法入口。classpath 為當前目錄 .,因此「在項目根目錄執行」是關鍵。.java / .class 後綴?-cp,路徑是否指向包根目錄而非類文件目錄?