[Java] Class1 — Java運作原理&撰寫第一隻java程式
首先你得安裝Java環境:
…..(待補)
Java運作過程
source: Book <<深入淺出JAVA程式語言>>
- 原始碼(Source code / .java)
eg: 以java語法了一個java class, 並存成.java檔。eg: Example.java - 編譯器(Compiler)
執行javac程式來編譯Example.java檔。編譯完後,會產生「bytecode」,存成Example.class的檔案 - 產生成bytecode
什麼是bytecode呢?是JAVA虛擬機器(JVM)能識別的code, JVM會幫我們把bytecode轉換成裝有JVM的各種不同裝置機器能理解的形式,讓機器運行程式 - 在裝有JVM的機器上執行code
JVM會將bytecode轉譯成各平台可執行的machine code (讓開發者可以透過JVM,就能夠在各種不同平台.OS上執行java)
source: https://stackoverflow.com/questions/21810538/c-and-java-virtual-machine-code-execution
What’s JVM & JRE & JDK
這篇講得很清楚了~
簡述一下:
JVM:
讓bytecode可以在各種不同os上運作的虛擬機器環境。
為什麼需要JVM這一層呢?因為每個OS機器上,他們的指令的機器碼的定義不一樣。你在window上編譯了某種語言並產生的執行檔,放到mac上是無法執行的。JAVA是高階語言,讓開發者及想執行java程式的人,不用擔心這些東西。在每一種JAVA支援的OS上安裝JVM後,JVM會自己幫你把bytecode轉成各平台認得的機器碼來執行。
但JVM是個規格,實際上實作,有不同大廠會依照這個規格實作JAVA VM。JVM被包含在後面說的JRE & JDK裡面(而我們平常安裝JAVA環境,就是選擇JRE or JDK做安裝,所以安裝完後,裡面就有JVM囉!)
JRE:
包含了JVM & JAVA SE API。我們常寫的第一個程式:就是印出hello world
System.out.println(“Hello World”);
先前曾經談過,Java是個標準,System、out、println這些名稱,都是標準中所規範的名稱,實際上必須要有人根據標準撰寫出System.java,編譯為System.class,如此你才能在撰寫第一個Java程式時,使用
System
類別(Class)上out
物件(Object)的println()
方法(Method)。誰來實作System.java?誰來編譯為.class?可能是Oracle、IBM、Apache,無論如何,這些廠商必須根據相關的JSR標準文件,將標準程式庫實作出來,如此你撰寫的第一個Java程式,在Oracle、IBM、Apache等廠商實作的JVM上運行時,引用如
System
這些標準API,你的第一個Java程式,才可能輕易地運行在不同的平台。在上圖中右邊可以看到Java SE API,涵蓋了各式常用的程式庫,像是通用的群集(Collection)、輸入輸出、連線資料庫的JDBC、撰寫視窗程式的AWT與Swing等,這些都是在各個JSR標準文件規範之中,
Java Runtime Environment就是Java執行環境,簡稱JRE,包括了Java SE API與JVM。只要你使用Java SE API中的程式庫,在安裝有JRE的電腦上就可以直接運行,無需額外在你的程式中再包裝標準程式庫,而可以由JRE直接提供。
JDK:
你寫的新的.java檔,是誰把他編譯成.class檔呢?是javac ! 他被包含在JDK裡面,JDK就是Java Development Kit !
對於要開發JAVA的工程師來說,需要編譯java檔.需要javadoc等工具提示你java lib的函式定義等等。
正如上圖所示,JDK包括了javac、appletviewer、javadoc等工具程式,對於要開發Java程式的人,必須安裝的是JDK,如此才有這些工具程式可以使用,JDK本身包括了JRE,如此你才能執行Java程式,
所以總結就是「JDK包括了Java程式語言、工具程式與JRE,JRE則包括了部署技術、Java SE API與JVM」。
簡單來說:
撰寫Java程式的人才需要JDK,如果你的程式只是想讓朋友執行呢?那他只要裝JRE就可以了,不用安裝JDK,因為他不需要javac這些工具程式,但他需要Java SE API與JVM。
撰寫第一隻JAVA程式並執行
來點簡單的,如何寫第一隻JAVA程式
開啟記事本,寫下第一支程式:
public class MyFirstJavaClass{
public static void main(String[] args){
System.out.println("hello world!");
}
}
存成 MyFirstJavaClass.java (記得:檔名要與class Name相同!)
於command line中執行:
javac MyFirstJavaClass.java
或 想看編譯過程發生什麼事,可以下 -verbose
javac -verbose MyFirstJavaClass.java
若順利執行完(編譯過程沒發生錯誤),會產生MyFirstJavaClass.class檔(bytecode)
執行.class檔
java MyFirtstJavaClass
Command Line應該就會印出
hello world!
上面四個過程,就是一開始說的「JAVA運作方式」的四個步驟囉!