那問題就在其實每個系統平台認識的機器語言也會有些許的不同,因此每台我們換一個作業系統,可能完成的程式無法正常執行,必須重新編譯才能在另一個平台正常運作,下圖讓大家對這個概念更加有印象,程式碼在windows, mac os, linux 編譯完後的機器語言其實都不一樣,因此就有了一個跨平台程式語言的概念出來了
原本我們的C/C++編譯完的.o 目標檔在不同平台下編譯出來的二進位檔就不一樣,因此在我們搬移執行檔到另一平台時,都必須重新編譯產出.o目標檔,如下:
簡單來說JAVA也是種編譯語言,但他會先編譯成bytecode,一種中介格式的位元碼,再透過JVM(JAVA Virtual Machine)將程式翻譯成與平台相符的機器語言,下圖說明bytecode 與 JVM在編譯過程中扮演的角色:
因為我們透過 java 編譯器產出的 byte code 是都長得一模一樣,只要我們有這個byte code 檔案,那麼就只差執行,
而執行環境JVM原本就按照你的平台來選擇安裝,JVM會將相同的byte code 檔案在執行時依據不同平台翻譯成機器語言,這樣使用JAVA開發出來的應用程式就可以不用管平台是哪個,都可以用一樣的byte code 檔案來執行
當我們要開發JAVA程式時,第一步就是到Oracle網站下載對應平台的JRE(JAVA Run Environment)版本,只要是由Java開發的應用程式,都需要安裝JRE,而我們的JVM就包含在JRE裡面
第二步就是開發JAVA所需要的JAVA函式庫 — JDK(JAVA Development Kit) ,這個也可以在Oracle JDK網站按照自己的平台下載,在今年也已經更新了JAVA SE 14版本
[JAVA編譯環境安裝]
JAVA環境安裝比較簡單,下載JRE, JDK安裝完就可以了,在此就不多說,不過有兩件事情提醒一下
1. 一般來說,我會在安裝完開發環境後,確認一下是否安裝成功,可以在Command Line 執行下圖中的指令(java -version, javac -version),確認JRE版本以及JDK版本
2. 如果確認版本有問題(例如 java not recognized as an internal or external command)的話,那可能就要先去確認在環境變數內是否有JDK的路徑,沒有的話必須加入,加入完在確認JRE版本以及JDK版本
[JAVA編譯與執行]
JAVA的編譯只需要在要編譯的檔案路徑執行 javac HelloWorld.java,會產生出一個.class檔案,就是bytecode 的檔案,而執行只需要java HelloWorld(不需要副檔名),此時是透過JVM去執行.class檔案
下圖左半就是編譯完後的專案架構,習慣是將輸出的中介檔案放在同一個資料夾,除了整齊之外,移植時只需帶中介檔案,程式碼也比較不會被看光光
[測試]
圖下方是執行的指令:
javac HelloWorld.java: 編譯HelloWorld.java檔案,-d 後面是指定.class檔案要存放的路徑
java HelloWorld:跳到out 資料夾執行java HelloWorld ,會看到輸出Hello World!
[QA]
● JAVA 編譯產出的中介語言叫什麼?
● javac 會產出什麼樣的檔案?
● 如果要開發JAVA 應用程式,必須要先安裝哪兩個套件?
● 如果確認版本有問題,需要怎麼處理?
喜歡我的文章的人也記得幫我按個拍手、分享,覺得很不錯的可以幫我拍個50下!
也要快點追蹤我的 FB粉絲專頁 — 飛比尋常的程式設計世界 ,不會太頻繁出現在你的塗鴉牆騷擾你,好文章生產需要一點時間,有錯誤或想討論的都歡迎留言給我唷!那就下次見拉!