第一個 Java 程序
本節(jié)我們將以Windows
操作系統(tǒng)為例,編寫并執(zhí)行第一個Java
程序。在這之前,請確保你的操作系統(tǒng)上已經(jīng)安裝了JDK
1. 編譯程序
大家可能有個疑問,為什么需要編譯程序呢?計算機不能直接執(zhí)行我們編寫的源代碼嗎?
這是由于計算機只能識別由0和1組成的二進(jìn)制代碼。需要通過編譯將源代碼轉(zhuǎn)換為計算機認(rèn)識的二進(jìn)制代碼。
1.1 Java 中的編譯
在 Java 中,程序不是直接被編譯為可執(zhí)行文件,而是被編譯為字節(jié)碼文件, JVM
(Java虛擬機)在運行時執(zhí)行字節(jié)碼文件。當(dāng)我們使用 javac
編譯器時,Java 源代碼文件被編譯為字節(jié)碼文件,字節(jié)碼文件以擴展名 .class
的形式保存在磁盤上。當(dāng)程序運行時,字節(jié)碼文件將被轉(zhuǎn)換為機器代碼,并在內(nèi)存中執(zhí)行。
總的來說,Java 源代碼需要被“轉(zhuǎn)換”兩次才能被計算機執(zhí)行:
- Java 源代碼被編譯為字節(jié)碼:由 javac 前端編譯器完成;
- 字節(jié)碼被編譯為機器碼:由 JVM 的執(zhí)行引擎完成。
下圖描述了一個Java
程序從編寫到編譯,再到執(zhí)行的步驟:

1.2 快速執(zhí)行一個程序
1.2.1 準(zhǔn)備工作
為了確保我們?nèi)松械谝粋€ Java 程序能夠順利執(zhí)行,請首先確認(rèn)你已經(jīng)完成了下面兩件事情:
- 已經(jīng)在你的電腦上成功安裝
JDK
; - 有一個文本編輯器。(如 Windows 的記事本,Unix 的 vim)。
1.2.2 編寫源代碼
新建一個文本,輸入如下內(nèi)容,將其命名為 HelloWorld.java
并保存
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Tips:
- 文件名必須與類名同名(類名就是上面第一行代碼中
class
后面的HelloWorld
),并且擴展名為.java
,文件名和類名都區(qū)分大小寫,所以請確保文件名和類名大小寫保持一致;- 類的命名約定以大寫字母開頭;
- 上述代碼中的所有符號,請使用英文半角;
- 別忽略了代碼第三行結(jié)尾的分號
;
。
下面為實操中的截圖。
打開記事本,輸入源代碼:

點擊文件 -> 保存,將文件保存到磁盤(此處保存在桌面上),注意:這里要將文件名命名為HelloWorld.java
,保存類型選擇所有文件,編碼選擇UTF-8
:

1.2.3 編譯后執(zhí)行
現(xiàn)在,打開你常用的命令行工具。(如 Windows 上的命令提示符、MacOS 上的終端),并進(jìn)入你剛剛保存 Java 源代碼的目錄。
在Windows
搜索欄中輸入cmd
即可打開:

使用cd
命令,進(jìn)入到我們剛剛保存源代碼的目錄(即進(jìn)入到桌面目錄cd Desktop
),使用dir
命令,查看目錄下內(nèi)容:

使用javac
命令編譯源代碼:
javac HelloWorld.java

執(zhí)行編譯命令后,你會發(fā)現(xiàn)同一目錄下會生成一個HelloWorld.class
文件,這個HelloWorld.class
就是我們說的字節(jié)碼文件。接下來就是通過 JVM
執(zhí)行字節(jié)碼文件了,輸入下面的命令:
java HelloWorld
如果一切正常,你會看到屏幕上輸出如下內(nèi)容:

祝賀你!成功執(zhí)行了第一個 Java 程序!
Tips:
javac
是編譯器,而java
是虛擬機,先使用javac
編譯器編譯源代碼,再使用java
虛擬機執(zhí)行字節(jié)碼文件。這就是我們上面提到的 java 源代碼被轉(zhuǎn)換兩次到執(zhí)行的過程。java
命令后面的參數(shù)是類名。換句話說,我們只需要給虛擬機傳遞類名作為參數(shù)即可,虛擬機會自動查找對應(yīng)的以.class
為擴展名的文件并且執(zhí)行。
2. 理解程序
我們現(xiàn)在對上面的 HelloWorld.java
代碼進(jìn)行解析:
public class HelloWorld {
...
}
這段代碼表示我們定義了一個公開類,類名為 HelloWorld
,按照約定類名首字母要大寫。
public
表示這個類是公開的(至于什么是公開的,我們后面再講),class
顧名思義,就是類, public
和 class
都是 Java 中的關(guān)鍵字,必須小寫。 花括號{}
中間為類的定義。
下面我們來看下花括號中間的 main()
方法代碼:
public static void main(String[] args) {
...
}
這段代碼表示我們定義了一個入口方法,注意:入口方法是 Java 程序執(zhí)行的起點。
public
和 static
分別表示方法是公開的、靜態(tài)的,void
是方法的返回類型,main
后面的括號()
用來將方法的參數(shù)括起來,String[]
是參數(shù)的類型,args
是參數(shù)的名稱。
當(dāng)然,剛剛對于代碼的解釋略顯生澀,作為初學(xué)者無需深究每一項的含義。但有一個點請務(wù)必牢記:Java 規(guī)定,某個類定義的public static void main(String[] args)
是Java程序的固定入口方法。
在方法內(nèi)部,有一行代碼:
System.out.println("Hello World!");
這行代碼的意義就是將Hello World
這一串字符打印在屏幕上。你可以嘗試修改這塊內(nèi)容,將代碼中的Hello World!
,替換為其他內(nèi)容,例如:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("我愛慕課網(wǎng)!");
}
}
保存源代碼,打開命令行,重新編譯執(zhí)行,屏幕上輸出的內(nèi)容將會被成功替換。
3. 小結(jié)
本小節(jié)我們一起完成了第一個 Java 程序的執(zhí)行,在這個過程中,我們了解了編譯相關(guān)的知識,知道了使用 javac
命令,可以將一個.java
擴展名的源代碼文件編譯成.class
擴展名的字節(jié)碼文件,使用 java
命令,可以執(zhí)行字節(jié)碼文件。我們也對程序的基礎(chǔ)語法有了大致的了解。如果你對程序的理解還有困惑,也不必?fù)?dān)心,在后面的章節(jié)中,我們將具體學(xué)習(xí) Java 的基礎(chǔ)語法,隨著知識的累積,你也將更加游刃有余地閱讀、編寫程序。