我們先看到下面這張圖
原始碼 (source code) 就是我們寫程式 (program) 所用的 .java 檔案,原始碼需要先經過編譯器 (compiler) 編譯 (compile) 成位元組碼 (byte code) 。
接者作業系統 (operating system) 啟動 Java 虛擬機器 (Java Virtual Machine, JVM) ,由 Java 虛擬機器呼叫指定類別 (class) 的 main() 方法 (method) ,實際執行 main() 中的程式碼。
由於 Java 程式是編譯成位元組碼,並由 Java 虛擬機器來執行,這構成 Java 跨平台的特性,因此編譯一次,便可以在裝有 Java 虛擬機器的硬體來執行 (write once, run anywhere) 。
我們提供的簡單範例的程式原始碼如下
001 | // 宣告類別名稱 |
002 | public class Demo { |
003 | // 宣告 main() 方法 |
004 | public static void main(String[] args) { |
005 | // 建立 Object 型態的物件 |
006 | Object o = new Object(); |
007 | |
008 | // 於命令列印出訊息 |
009 | System.out.println(); |
010 | System.out.println(o.toString()); |
011 | System.out.println("程式執行結束"); |
012 | System.out.println(); |
013 | } |
014 | } |
015 | |
016 | /* 檔名: Demo.java |
017 | 作者: Kaiching Chang |
018 | 時間: September, 2014 */ |
命令列編譯原始碼檔案使用命令 javac ,如下
如果無聲無息的跳到下一行,就表示編譯完成,相同目錄下會產生 Demo.class 檔案
然後要在命令列執行 Demo.class ,使用命令 java ,如下
此程式連續呼叫 System 類別 out 屬性 (field) 的 println() 方法四次, println() 需要字串 (string) 當參數 (parameter) ,然後再字串結尾會附加印出 '\n' ,這就是新行符號的跳脫字元,因此呼叫下一個 println() 的時候,會從最左邊開始印出字串訊息。如果沒有提供參數, println() 就只單純印出 '\n' ,也就是空白的一行。
這裡須注意,字串與字元 (character) 是不同的,字串是物件 (object) ,字元則屬於基本資料型態 (primitive data type) 之一,存取物件的變數 (variable) 為參考 (reference) ,基本資料型態則會直接儲存在變數之中。
接下來,我們來看看基本資料型態、物件與參考吧!
中英文術語對照
原始碼 | source code |
程式 | program |
編譯器 | compiler |
編譯 | compile |
位元組碼 | byte code |
作業系統 | operating system |
Java 虛擬機器 | Java Virtual Machine, JVM |
類別 | class |
方法 | method |
屬性 | field |
字串 | string |
參數 | parameter |
字元 | character |
物件 | object |
基本資料型態 | primitive data type |
變數 | variable |
參考 | reference |
重點整理
- 於命令列編譯 Java 程式的指令為 javac ,編譯成功會產生 .class 檔案,執行 Java 程式的指令為 java 。
- Java 是編譯式的程式語言原始碼需要先經過編譯器編譯成位元組碼,然後才交由虛擬機器執行,這樣的特性被稱為 write once, run anywhere 。
- '\n' 為跳脫字元中的新行符號。
- Java 的變數有兩種,基本資料型態直接存在變數之中,物件在變數裡儲存的是參考。
問題與討論
- 編譯與直譯的差別在哪裡?編譯的程式語言相較直譯的程式語言有什麼優點及缺點?
- 為什麼變數要分成基本資料型態及參考兩種?
- 在 Mac 編譯的位元組碼可以拿到 Windows 系統執行嗎?
the end
沒有留言:
張貼留言