public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
保存為 E:\javasrc\HelloWorld.java:
E:\javasrc> javac HelloWorld.java
E:\javasrc> java HelloWorld
Hello World!
E:\javasrc> java HelloWorld.class
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
原因:JVM 認為運行 HelloWorld 包下的 class 類,尋找 HelloWorld.class.class。class 是關鍵字不能作類名,必然失敗。
正確:java HelloWorld (類全限定名,無後綴)
Windows 下 javac helloworld.java 可編譯通過,產生 HelloWorld.class (保持源文件類名大小寫)。但運行:
E:\javasrc> java helloworld
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)
鐵律:java 命令區分大小寫,必須與類聲明完全一致。
package org.javaresearch;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
E:\javasrc> javac HelloWorld.java
→ 當前目錄生成 HelloWorld.class
E:\javasrc> java HelloWorld
Exception: wrong name: org/javaresearch/HelloWorld
需按包結構建目錄並移動 class 文件:
mkdir E:\javasrc\org\javaresearch
move HelloWorld.class E:\javasrc\org\javaresearch\
E:\javasrc> java org.javaresearch.HelloWorld
Hello World!
注意:不能用 java org\javaresearch\HelloWorld 或 java orgjavaresearchHelloWorld,必須用點號分隔包名。
E:\javasrc> javac -d . HelloWorld.java
→ 當前目錄自動生成 org\javaresearch\HelloWorld.class
E:\javasrc> java org.javaresearch.HelloWorld
Hello World!
指定輸出根目錄:
mkdir E:\javaclasses
E:\javasrc> javac -d E:\javaclasses HelloWorld.java
→ E:\javaclasses\org\javaresearch\HelloWorld.class
E:\javaclasses> java org.javaresearch.HelloWorld
Hello World!
若有其他依賴類,需在 CLASSPATH 中正確設置。
javac 編譯源文件,java 運行類 (非文件).class,區分大小寫javac -d <dir> 自動創建包目錄並輸出 class,最佳實踐-d 指定目錄) 利於專案構建與部署掌握這些基礎,能避開 90% 的 Hello World 階段坑,為後續學習打穩地基。