[Java] Class1 — Java運作原理&撰寫第一隻java程式

Chia-wen Hou
6 min readFeb 25, 2019

--

首先你得安裝Java環境:

…..(待補)

Java運作過程

source: Book <<深入淺出JAVA程式語言>>

  1. 原始碼(Source code / .java)
    eg: 以java語法了一個java class, 並存成.java檔。eg: Example.java
  2. 編譯器(Compiler)
    執行javac程式來編譯Example.java檔。編譯完後,會產生「bytecode」,存成Example.class的檔案
  3. 產生成bytecode
    什麼是bytecode呢?是JAVA虛擬機器(JVM)能識別的code, JVM會幫我們把bytecode轉換成裝有JVM的各種不同裝置機器能理解的形式,讓機器運行程式
  4. 在裝有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運作方式」的四個步驟囉!

--

--