Java 快速導覽 - 簡單的 Java 程式

接下來我們以一個簡單的 Java 程式開始吧!

class DemoApp {
    public static void main(String[] args) {
        Demo d = new Demo();
        d.printMessage();
    }
}

class Demo {
    String message = "^_^ 哈囉";
    
    public void printMessage() {
        System.out.println(message);
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:DemoApp.java
    功能:簡單的 Java 範例
    作者:張凱慶
    時間:西元 2010 年 10 月 */


首先,注意 classpublicstaticvoidnew 等,這幾個都是關鍵字 (keyword) 。所謂的關鍵字就是語法保留字,在 Java 中有專門功能,如 class 定義類別, public 指定存取權限, static 指定為類別成員 (class member) , void 標示沒有回傳值, new 用以建構新的物件。


我們暫時忽略程式中詳細定義的細節,先了解 Java 程式的原始檔是由類別使用關鍵字 class 所定義的,以及物件是怎麼建構出來的。所以這個簡單的 Java 範例包含了兩個類別定義,分別是 DemoApp 及 Demo ,前者 DemoApp 包含一個 main() 方法,這是說,編譯 DemoApp.java 後, DemoApp 是可執行的。


這裡須留意一點,每個 Java 程式的原始檔至少要包含一個類別的定義,檔案名稱需要和類別名稱相同。類別的定義內容必須用大括弧圍起來,這是要讓編譯器知道類別的範圍,類別內分別有定義方法 (method) 及屬性 (field) ,以小括弧結尾的名稱便是方法,同樣其後的大括弧就是方法所要負責的工作內容,沒有小括弧直接以分號結尾的名稱,便是屬性。


所以,類別 DemoApp 只有一個 main() 方法,而 Demo 有一個屬性 message ,一個方法 printMessage() 。


使用關鍵字 class 定義的類別建構出的物件,我們稱此物件具有該類別名稱的型態,如 DemoApp 方法 main() 的定義裡
Demo d = new Demo();
d.printMessage();


其中第 3 行宣告然後建立 Demo 型態的的物件,變數 d 為對此物件的參考



整個過程可以分成兩部份來看,第一個部份是宣告,也就是
Demo d;


這表示變數 d 為對 Demo 型態物件的參考。第二個部份是建立
d = new Demo();


關鍵字 new 表示要建立新的物件, new 後面的 Demo() 為建構子 (constructor) ,專門用來建立物件。通常建構子需要自行在類別中定義,類似方法的定義,然而若是沒有自己定義建構子的話,編譯器會提供一個預設的建構子。


因此,實際物件是由 Demo() 產生的,變數 d 是指向這個物件的參考



Demo() 產生物件後,藉由指派運算子 (assignment operator) 把物件參考傳給變數 d 。注意,這裡的指派運算子運用單一個等號 = ,表示把等號右邊的數值給左邊的變數。


接下來程式唯一做的事情就是第 4 行,物件參考變數 (reference variable) 運用句點運算子 (dot operator) 呼叫 printMessage() 方法,這個細節先不管,底下,我們先來編譯看看囉!



編譯程式的指令為 javac ,編譯成功的話就會無聲無息跳到命令列的下一行。執行程式則利用指令 java



嗯,這個程式就是印出 ^_^ ,然後說聲哈囉!

^_^


這個程式是在 Mac 底下編譯執行的,由於 Mac 的命令列環境與 Java 編譯器常發生編碼不相符的情況,因此這裡加上參數,指定編碼給 javac 及 java 兩個指令。若是在其他作業系統的環境,通常編譯只需要用指令 javac ,然後空一格加檔名,執行也只需要指令 java ,然後空一格加類別名稱。


中英文術語對照
關鍵字keyword
類別成員class member
方法method
屬性field
建構子constructor
指派運算子assignment operator
參考變數reference variable
句點運算子dot operator




5 則留言:

匿名 提到...

我是這兩天才開始學java的...
看到這網站很感動:D
可是... 我不懂上面那個範例為什麼要寫什麼變數d之類的=(
看不懂的說Otz
還有new 那個我也看不太懂Q.Q"
我自己寫的是這樣子
class text{
public static void main(String args[]){
System.out.println("^_^ 哈囉");
}
}
也可以執行出上述內容..
是為了多介紹那些東西所以才寫那樣的嗎?
可是這樣反而讓我多花了兩個小時才看懂這段簡單的程式=(

Kaiching Chang 提到...

new 是用來建立新物件的
小程式的確不必這麼麻煩
這裡的目的是讓初學者熟悉 Java 物件的概念
往後程式越寫越大,三不五十就需要 new 一下
建議讀到後面物件導向篇時
可以再回過頭來仔細閱讀這裡所講的基本概念 :)

symis 提到...

感謝您用心製作此教學,該我等初學者受惠!
但您的程式碼,當我複製到eclipse或文字檔中時,卻沒有斷行,全部連在一起,請問該如何解決?
謝謝!

Kaiching Chang 提到...

這是分行符號的問題,如果使用 MS-Windows 系統的話,請將分行符號改成 CR+LF ,或請參考維基百科的解釋。 :)

Unknown 提到...

樓主解釋得真得好啊!連每一個字及小節,也能詳盡加以說明,用生活上的比喻代入程式解說,使初學者更容易理解,是我看過最好的java教學,這使我獲益良多,讚^^