Java基礎教程(2)--Java開發環境

weixin_33924312發表於2019-01-11

一.JVM、JRE和JDK的概念

對於初學者來說,這三個術語出現的頻率很高,而且有關這它們的問題在面試題中也會經常出現。因此,理解它們的定義、區別和聯絡就顯得尤為重要。在學習這幾個專業術語之前,我們先來了解一下Java程式碼的編譯執行過程。

機器語言是用二進位制程式碼表示的,能夠被計算機直接識別和執行的一種機器指令的集合。也就是說,通過機器語言,我們可以直接操控電腦去做任何我們想要執行的操作。但是,由於機器語言是用二進位制表示的,這就導致了它學習成本高、程式碼晦澀難懂、不便於除錯等缺點。試想一下,寫程式碼只用0和1,每個指令都要查手冊,而且一旦手誤寫錯一個數字,很難靠肉眼識別出來,這對於程式設計師來說,無疑是一件非常痛苦的事。

高階語言是以人類的日常語言為基礎的一種程式語言,使用一般人易於接受的文字來表示(例如漢字、不規則英文或其他外語),它的學習成本相對於機器語言來說大大降低,從而使程式編寫更容易,亦有較高的可讀性。編譯器是將高階語言翻譯成機器語言的軟體,使用高階語言編寫的程式碼經過編譯器翻譯以後得到電腦可以直接執行的機器語言程式碼,這就相當於變相地編寫機器語言。電腦領域已經發明瞭成百上千種程式語言,每種語言都有對應的編譯器。在編寫高階語言之前,首先要確保電腦上已經安裝了對應的編譯器。

高階語言大體上可分為編譯型語言和解釋型語言。編譯型語言首先將原始碼通過編譯器生成機器語言程式碼,再由電腦執行生成的機器語言程式碼。像C和C++等都是編譯型語言。解釋型語言不需要事先編譯,直接將原始碼解釋成機器語言並立即執行,每次執行都需要重新翻譯。像Python和JavaScript等都是解釋型語言。

Java語言是一種特殊的存在。Java原始碼(檔案字尾名為.java)首先經過編譯之後轉換為一種稱為Java位元組碼的中間語言(檔案字尾名為.class),再由Java虛擬機器對位元組碼進行解釋和執行。如果說它是編譯型語言,它編譯之後得到的並不是機器語言程式碼,無法直接執行,這與編譯型語言的定義相矛盾;但是如果說他是解釋型語言,似乎也不太合理,因為它在解釋之前有一個編譯過程。因此,可以說它既是編譯型語言,又是解釋型語言,也可以說它既不是編譯型語言,又不是解釋型語言。

現在回過頭來看JVM、JRE和JDK的概念。JVM(Java Virtual Machine,Java虛擬機器)是將Java位元組碼解釋給本地系統執行的軟體。JVM是Java實現其平臺無關性特點的關鍵。Java語言使用JVM遮蔽了與具體平臺相關的資訊,使得Java語言編譯程式只需生成在Java虛擬機器上執行的目的碼(位元組碼),就可以在多種平臺上不加修改地執行。JVM在執行位元組碼時,把位元組碼解釋成具體平臺上的機器指令執行。這就是Java的能夠“一次編譯,到處執行”的原因。

但是隻有JVM還不能執行位元組碼,因為在解釋位元組碼的時候JVM需要呼叫解釋所需要的類庫。JRE(Java Runtime Environment,Java執行時環境)是執行Java程式所必需的環境的集合,包含JVM標準實現及Java核心類庫。也就是說,如果要執行Java程式,那麼電腦上必須安裝JRE。

安裝JRE之後,我們就可以在電腦上執行編譯好的Java程式了。這對於Java程式的使用者來說足夠了,但是如果是Java開發人員,那麼只安裝JRE將無法進行Java開發,因為無法將Java原始碼編譯成位元組碼。JDK(Java Development Kit,Java開發工具包)中包含了編譯Java原始碼的工具javac,提取Java文件的工具javadoc等工具和JRE。因此,安裝JDK以後,我們既可以進行Java的開發,也可以執行Java程式。下面這張圖很好地說明了這三者之間的關係:

15651755-011429688c21e2bc

二.安裝JDK

1.下載JDK

正如上一篇文章中所說,我們選擇安裝JDK11。這裡是它的下載地址。個人比較喜歡壓縮包的安裝方式,所以這裡選擇windows64位的zip檔案。注意要勾選Accept License Aggrement。

15651755-e02731e514e491ae

將下載的壓縮包解壓至任何你想要安裝的位置。這裡我將解壓出的jdk-11資料夾放在了F盤的env資料夾下。

2.配置環境變數

接下來需要配置環境變數Path和JAVA_HOME。首先介紹一下為什麼需要配置這兩個環境變數。Path環境變數用來指定cmd中可執行檔案的搜尋路徑。編譯Java原始碼需要使用javac.exe,執行位元組碼需要使用java.exe,如果沒有配置這兩個可執行檔案的路徑,那麼在cmd中使用這兩個命令時將會出現“xxx不是內部或外部命令”的錯誤。而JAVA_HOME環境變數則是用來定義JDK的安裝路徑。在一個環境變數中可以使用其他環境變數的值,使用時需要在其他環境變數前後加%。例如,JDK的安裝路徑是F:\env\jdk-11,那麼JAVA_HOME也需要配置為F:\env\jdk-11。javac.exe和java.exe的路徑為F:\env\jdk-11\bin,那麼Path中只需要配置%JAVA_HOME%\bin即可。這樣做的一個好處是,如果要切換或修改JDK的路徑,只需要修改JAVA_HOME的值。另外一個需要配置JAVA_HOME的原因是,許多元件依賴於Java的環境,如果不配置JAVA_HOME環境變數,這些元件將會因為找不到Java的安裝路徑而報錯,例如tomcat、maven等。

在許多其他有關配置JDK環境變數的教程中都配置了CLASSPATH,但是從Java1.5開始就可以不配置這個環境變數了,而且每篇教程裡CLASSPATH的值都不一樣,有配置rt.jar的,有配置dt.jar的,也有配置tools.jar的,這對於初學者來說非常不友好。這裡我們選擇不配置CLASSPATH變數。

最後再來介紹一下系統變數和使用者變數。在配置每個環境變數時,既可以將其配置在系統變數裡,又可以配置在使用者變數裡。但是系統變數對所有使用者都有效,而使用者變數只對當前使用者有效。並且系統變數的優先順序高於使用者變數,也就是說如果一個環境變數在系統變數和使用者變數中都進行了配置,那麼電腦將優先使用系統變數。因為系統變數中有許多比較重要的環境變數,所以我選擇在使用者變數中配置Path和JAVA_HOME變數。

如果是使用IDEA(一個JDK的整合開發環境,下文會講到)進行開發的話,Path變數是沒有必要配置的,因為可以在IDEA中配置Java的安裝路徑。但是為了演示在cmd中使用javac和java命令,我們將同時配置Path和JAVA_HOME變數。

下面是具體的配置步驟:

(1)右鍵我的電腦,屬性,找到高階系統設定;

15651755-72dc25602e51cae9

(2)高階,環境變數;

15651755-965e09f75c8062dc

(3)在使用者變數中新建JAVA_HOME變數,複製JDK的安裝路徑並貼上到變數值,確定;

15651755-704f85371138e75f

(4)在使用者變數中編輯Path變數(如果沒有就新建),填入%JAVA_HOME%\bin,確定;

15651755-1538c66e4d19106b

之後一直點選確定即可退出環境變數的配置。至此,JDK的環境變數就全部配置完成了。此時可以開啟cmd測試一下(如果配置前已經開啟了cmd,需要關閉並重新開啟,因為環境變數會在下一次開啟cmd時才生效)。輸入javac -version和java -version,看到如下輸出則表示配置成功:

15651755-72ee693c843b2bbd

三.第一個Java程式--HelloWorld

下面我們將編寫一個非常簡單的Java程式來體驗Java程式碼的編寫、編譯和執行。

首先新建一個文字文件,然後編寫以下程式碼:

publicclassHelloWorld{publicstaticvoidmain(String[] args){ System.out.println("Hello World!");// Display the string.}}

儲存,然後將檔名修改為“HelloWorld.java”。開啟cmd,切換到這個檔案所在的目錄(我將這個檔案放在了F盤的根目錄下),然後執行javac HelloWorld.java進行編譯,此時會在目錄中看到生成了一個HelloWorld.class檔案,這個檔案就是編譯之後生成的位元組碼。接著執行java HelloWorld(這裡不用加.class字尾),命令列將會輸出“Hello World!”。

15651755-4693b603d1a4d6a5

這裡看不懂沒有關係,我們會在後面的文章中對每一個語法進行介紹。

四.整合開發環境

上一節中,我們已經瞭解瞭如何從命令列編譯和執行一個Java程式,這是一個很有用的技能。但是每次編譯和執行都要手動輸入命令則會顯得有點麻煩。整合開發環境(Integrated Development Environment,以下簡稱IDE)整合了這些功能,在編寫完程式碼後只需要點選執行按鈕,IDE將會在後臺自動為我們執行這些命令並將輸出顯示在控制檯上。當然,IDE的功能遠不止於此,它還提供了除錯、分析、自動補全、語法檢測等許多功能,它使得我們的開發工作更加輕鬆高效。

Java的IDE有很多,其中最出名的要屬eclipse和Intellij IDEA了。eclipse是一個開源的、免費的整合開發環境。筆者剛開始學習Java使用的就是這款IDE,直到後來遇到了IDEA。個人更加喜歡IDEA,功能非常強大,介面也很美觀。網上有很多人就eclipse和IDEA哪個更好展開了激烈的討論,在我看來這是沒有必要的。IDE只是一個工具,每個人選擇自己用著順手的工具就可以了,我們真正關注的程式語言本身,而不是使用什麼工具並且說服別人一定要去用什麼工具。在後面的教程中我都會使用IDEA進行講解。

IDEA分為社群版(Community)和旗艦版(Ultimate),社群版免費,但是相對於旗艦版來說少了很多功能,不過對於Java初學者來說肯定是夠用了。旗艦版收費,而且非常貴,第一年的價格是499美刀,之後每年便宜100美刀,第三年及以後都是299美刀。學生黨可以憑藉教育網郵箱(字尾為.edu.cn的郵箱)申請免費試用。如果不是學生黨到但是還是想使用旗艦版的話,這裡推薦一個提供免費註冊碼的網站,上面有詳細的教程。

相信有很多學習java的道友,海量知識分,絕對是Java乾貨,等各位的到來,我們一同從入門到精通吧!

Java學習交流:【47】974【9726】

15651755-6c00061f47ed3641
15651755-9f143423e5b9e5bb

相關文章