Java 入門指南 V2.00 - 單元 2 - 如何編譯與執行




我們先看到下面這張圖



原始碼 (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// 宣告類別名稱
002public 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

重點整理


  1. 於命令列編譯 Java 程式的指令為 javac ,編譯成功會產生 .class 檔案,執行 Java 程式的指令為 java
  2. Java 是編譯式的程式語言原始碼需要先經過編譯器編譯成位元組碼,然後才交由虛擬機器執行,這樣的特性被稱為 write once, run anywhere
  3. '\n' 為跳脫字元中的新行符號。
  4. Java 的變數有兩種,基本資料型態直接存在變數之中,物件在變數裡儲存的是參考。

問題與討論


  1. 編譯與直譯的差別在哪裡?編譯的程式語言相較直譯的程式語言有什麼優點及缺點?
  2. 為什麼變數要分成基本資料型態及參考兩種?
  3. 在 Mac 編譯的位元組碼可以拿到 Windows 系統執行嗎?

the end

沒有留言: