給完全新手的第一堂課

從零開始學 Java

不需要任何程式經驗。這一頁會帶你認識 Java 是什麼、要安裝什麼、 怎麼寫出第一個程式,以及最基本的語法觀念。

開始閱讀 ↓

1什麼是 Java?

Java 是一種程式語言,1995 年由 Sun Microsystems 推出,現在由 Oracle 與開源社群(OpenJDK)共同維護。 它被廣泛用在企業後端系統、Android App(早期主要語言)、大型網站、金融系統等地方。

🌍 一次撰寫,到處執行

Java 程式會先被編譯成 bytecode(位元組碼),再由 JVM(Java 虛擬機器)執行。只要那台電腦有 JVM,不管是 Windows、macOS 或 Linux 都能跑。

🧱 物件導向

Java 用「類別(class)」與「物件(object)」來組織程式,讓大型專案更容易分工與維護。

🛡️ 型別嚴謹

每個變數都要宣告型別(例如整數、文字),很多錯誤在編譯階段就會被抓出來,對新手其實是好事。

小提醒:Java 和 JavaScript 是完全不同的語言,只是名字很像而已。

2JDK 和 JRE 有什麼不同?

剛開始最常被這幾個縮寫搞混,用一句話記:要寫程式,就裝 JDK。

名稱全名用途
JVM Java Virtual Machine 真正「執行」bytecode 的虛擬機器。
JRE Java Runtime Environment JVM + 執行時需要的函式庫。只能「跑」Java 程式。
JDK Java Development Kit JRE 的功能 + 開發工具(例如編譯器 javac)。能「寫」也能「跑」。
JDK(開發工具:javac、jar…)
JRE(函式庫)
JVM

註:從 Java 11 開始,官方大多不再單獨提供 JRE 安裝包,直接安裝 JDK 即可。

去哪裡下載 JDK?

請到下列官方網站下載(建議選擇 LTS 長期支援版本):

⚠️ 請自行確認:網站內容與版本號會隨時間變動,下載前請確認網址是官方網域、 並閱讀該頁面的授權條款與安裝說明。本頁不提供任何直接的安裝檔連結。

安裝完成後,打開「終端機」(Windows 為「命令提示字元」或 PowerShell),輸入:

$ java -version
$ javac -version

如果兩個指令都會顯示版本號,就代表安裝成功了!

3第一個程式:Hello World

建立一個檔案,檔名必須叫做 HelloWorld.java(大小寫要完全一樣),內容如下:

HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

逐行解釋

  • public class HelloWorld:定義一個叫 HelloWorld 的類別。公開類別的名稱要和檔名相同。
  • public static void main(String[] args):程式的入口。執行時,JVM 會從這裡開始跑。先把它當成固定寫法背起來就好。
  • System.out.println(...):在螢幕上印出一行文字。
  • 每個敘述結尾要加 ;(分號),程式區塊用 { } 包起來。

編譯與執行

  1. 打開終端機,用 cd 切換到檔案所在的資料夾。
  2. 編譯:把 .java 原始碼變成 .class bytecode
    $ javac HelloWorld.java
    成功的話不會有任何訊息,但資料夾裡會多一個 HelloWorld.class。
  3. 執行:注意這裡不要加 .class
    $ java HelloWorld
    Hello, World!
HelloWorld.java原始碼
→ javac →
HelloWorld.classbytecode
→ java →
Hello, World!JVM 執行結果
小知識:Java 11 以後,單一檔案的程式也可以直接用 java HelloWorld.java 執行(背後會自動編譯)。 不過先學會 javac + java 兩步驟,比較能理解 Java 的運作方式。

4互動示範:假裝的終端機

這是一個用 JavaScript 模擬的「假」終端機,不會真的執行 Java,只是讓你熟悉流程。 按「下一步」照著做,或自己在下方輸入指令試試看(輸入 help 查看可用指令)。

~/java-practice

5變數與資料型別

變數就像一個貼了標籤的盒子,用來存放資料。在 Java 裡,宣告變數時要先寫出它的型別。

Variables.java
public class Variables {
    public static void main(String[] args) {
        int age = 18;              // 整數
        double height = 172.5;     // 小數
        boolean isStudent = true; // 真或假
        char grade = 'A';          // 單一字元(單引號)
        String name = "小明";       // 文字(雙引號)

        System.out.println(name + " 今年 " + age + " 歲");
        age = age + 1;              // 變數的值可以改變
        System.out.println("明年 " + age + " 歲");
    }
}
輸出小明 今年 18 歲 明年 19 歲
型別說明範例
int整數42、-7
double小數(浮點數)3.14
boolean布林值:真 / 假true、false
char單一字元'A'
String字串(一串文字)。注意 S 大寫,它其實是一個類別"Hello"

// 後面是註解,給人看的說明文字,電腦會忽略它。

6條件判斷:if / else

程式需要「做決定」時,就用 if。括號裡放一個會得到 true 或 false 的條件。

片段(放在 main 方法裡)
int score = 75;

if (score >= 90) {
    System.out.println("優秀!");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("再加油");
}
輸出及格

常用比較與邏輯運算子

運算子意思
==等於(注意是兩個等號;一個 = 是「指定值」)
!=不等於
> < >= <=大於、小於、大於等於、小於等於
&&而且(兩個條件都要成立)
||或者(其中一個成立就好)
!反過來(not)
新手陷阱:比較兩個 String 內容是否相同,請用 a.equals(b),不要用 a == b。

7迴圈:重複做某件事

for 迴圈:知道要做幾次

for (int i = 1; i <= 5; i++) {
    System.out.println("第 " + i + " 次");
}
輸出第 1 次 第 2 次 第 3 次 第 4 次 第 5 次

括號內三個部分:起始值(int i = 1);繼續的條件(i <= 5);每次結束後做什麼(i++ 表示 i 加 1)。

while 迴圈:條件成立就一直做

int count = 3;
while (count > 0) {
    System.out.println("倒數 " + count);
    count--;   // count 減 1,忘記寫會變成無窮迴圈!
}
System.out.println("發射!🚀");
輸出倒數 3 倒數 2 倒數 1 發射!🚀

8陣列:一次存很多個值

陣列(array)是一排同型別的盒子,每個盒子有編號(索引),而且從 0 開始數。

80[0]
95[1]
72[2]
60[3]
int[] scores = {80, 95, 72, 60};

System.out.println(scores[0]);       // 第一個:80
System.out.println(scores.length);   // 長度:4

int total = 0;
for (int i = 0; i < scores.length; i++) {
    total += scores[i];
}
System.out.println("總分:" + total);

// 「for-each」寫法:逐一取出每個元素
for (int s : scores) {
    System.out.print(s + " ");
}
輸出80 4 總分:307 80 95 72 60
新手陷阱:長度為 4 的陣列,最後一個索引是 3。存取 scores[4] 會出現 ArrayIndexOutOfBoundsException 錯誤。

9簡單的類別與方法

方法(method)是把一段程式包起來、取個名字,之後可以重複呼叫。 類別(class)則像是「設計圖」,可以用它建立出很多個物件(object)。

先從方法開始

Calculator.java
public class Calculator {

    // 接收兩個 int,回傳它們的和
    static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        int result = add(3, 4);
        System.out.println("3 + 4 = " + result);
    }
}
輸出3 + 4 = 7

再來是類別與物件

Main.java
class Dog {
    String name;   // 欄位(屬性)
    int age;

    // 建構子:用 new 建立物件時會執行
    Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法(行為)
    void bark() {
        System.out.println(name + ":汪汪!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog d1 = new Dog("小黑", 3);
        Dog d2 = new Dog("阿白", 5);
        d1.bark();
        d2.bark();
        System.out.println(d2.name + " " + d2.age + " 歲");
    }
}
輸出小黑:汪汪! 阿白:汪汪! 阿白 5 歲

編譯執行方式:javac Main.java 會同時產生 Main.class 和 Dog.class, 接著用 java Main 執行(因為 main 方法在 Main 類別裡)。

小提醒:一個 .java 檔裡只能有一個 public 類別,且名稱要和檔名一樣。 所以上面的 Dog 沒有加 public。

10常見錯誤與下一步

看到的錯誤可能原因
'javac' 不是內部或外部命令 / command not found沒有安裝 JDK,或沒有設定好 PATH 環境變數。
class X is public, should be declared in a file named X.java類別名稱和檔名不一致(包含大小寫)。
';' expected某一行結尾忘了加分號。
cannot find symbol變數或方法名稱打錯,或還沒宣告就使用。
Could not find or load main class執行時多打了 .class,或不在正確的資料夾裡。

接下來可以學什麼?

  • 使用 Scanner 讀取使用者輸入
  • ArrayList、HashMap 等集合(Collections)
  • 物件導向的繼承(inheritance)、介面(interface)
  • 例外處理:try / catch
  • 試試整合開發環境(IDE),例如 IntelliJ IDEA、VS Code 或 Eclipse

學程式最好的方法就是動手打:把這頁的範例親手打一遍、改改數字、故意寫錯看看錯誤訊息。祝你學習愉快!☕