作為零基礎轉型 Java 開發者,記錄從 JDK 安裝配置到運行第一個程序的完整踩坑過程,為同階段學習者提供可直接執行的操作清單。
安裝至根目錄無空格路徑,如 C:\jdk1.8.0_301 (現代版本) 或文中 C:\jdk (JDK 1.4 時代)。
| 系統 | 操作路徑 | 關鍵變量 |
|---|---|---|
| Win 98/Me | C:\autoexec.bat | set PATH=%PATH%;C:\jdk\binset CLASSPATH=.;C:\jdk\lib\dt.jar;C:\jdk\lib\tools.jar |
| Win 2000/XP/7/10/11 | 控制面板 → 系統 → 高級 → 環境變量 → 系統變量 | 新建 JAVA_HOME = C:\jdk 編輯 Path 追加 %JAVA_HOME%\bin新建 CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar |
現代最佳實踐 (JDK 9+): 僅設置 JAVA_HOME 和 Path,刪除 CLASSPATH 系統變量,避免類加載衝突,Maven/Gradle/IDE 會自動管理依賴。
C:\> java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
C:\> javac -version
javac 1.8.0_301
HelloWorld.javapublic class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
鐵律: 文件名 必須與類名完全一致 (大小写敏感),即 HelloWorld.java。
C:\workspace> javac HelloWorld.java
C:\workspace> java HelloWorld
Hello, World!
常見報錯 NoClassDefFoundError 原因:未配置 CLASSPATH 或運行時未包含當前目錄 .。
// 直接賦值 (字符串常量池)
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // true (同一對象)
// new 創建 (堆內存)
String s3 = new String("Hello");
System.out.println(s1 == s3); // false
System.out.println(s1.equals(s3)); // true (內容比較)
// 推薦風格:類型[] 變量名
int[] numbers = new int[5]; // 默認值 0
String[] messages = new String[5]; // 默認值 null
int[] scores = {90, 85, 78, 92, 88}; // 靜態初始化
// 遍歷
for (int score : scores) {
System.out.println(score);
}
public class MyProgram {
// 入口方法:固定簽名
public static void main(String[] args) {
// 程序主體
System.out.println("Start...");
}
// 實例方法
public int add(int a, int b) {
return a + b;
}
// 靜態方法 (工具類常用)
public static int multiply(int a, int b) {
return a * b;
}
}
ClassName.staticField / ClassName.staticMethod() (推薦),也可對象調用 (不推薦)public class Counter {
private static int count = 0; // 類變量
public Counter() {
count++;
System.out.println("第 " + count + " 個實例被創建");
}
public static int getCount() {
return count;
}
}
// 測試
new Counter(); // 第 1 個實例被創建
new Counter(); // 第 2 個實例被創建
System.out.println(Counter.getCount()); // 2
public class Test {
int instanceVar = 10;
public static void main(String[] args) {
// System.out.println(instanceVar); // 編譯錯誤!
// 原因:main 為 static,無 this 引用,不知訪問哪個對象的 instanceVar
}
}
解決:將變量改為 static,或在 main 中創建對象後訪問 new Test().instanceVar。
Java 學習曲線前陡後平,環境配置是第一道攔路虎,跨過它,廣闊的對象世界向你敞開。