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 月 */
首先,注意 class 、 public 、 static 、 void 、 new 等,這幾個都是關鍵字 (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 |
參考資料
http://download.oracle.com/javase/tutorial/java/concepts/object.html
http://download.oracle.com/javase/tutorial/java/concepts/class.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/op1.html
http://download.oracle.com/javase/tutorial/java/javaOO/objects.html
http://download.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
http://download.oracle.com/javase/tutorial/java/concepts/object.html
http://download.oracle.com/javase/tutorial/java/concepts/class.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/op1.html
http://download.oracle.com/javase/tutorial/java/javaOO/objects.html
http://download.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
5 則留言:
我是這兩天才開始學java的...
看到這網站很感動:D
可是... 我不懂上面那個範例為什麼要寫什麼變數d之類的=(
看不懂的說Otz
還有new 那個我也看不太懂Q.Q"
我自己寫的是這樣子
class text{
public static void main(String args[]){
System.out.println("^_^ 哈囉");
}
}
也可以執行出上述內容..
是為了多介紹那些東西所以才寫那樣的嗎?
可是這樣反而讓我多花了兩個小時才看懂這段簡單的程式=(
new 是用來建立新物件的
小程式的確不必這麼麻煩
這裡的目的是讓初學者熟悉 Java 物件的概念
往後程式越寫越大,三不五十就需要 new 一下
建議讀到後面物件導向篇時
可以再回過頭來仔細閱讀這裡所講的基本概念 :)
感謝您用心製作此教學,該我等初學者受惠!
但您的程式碼,當我複製到eclipse或文字檔中時,卻沒有斷行,全部連在一起,請問該如何解決?
謝謝!
這是分行符號的問題,如果使用 MS-Windows 系統的話,請將分行符號改成 CR+LF ,或請參考維基百科的解釋。 :)
樓主解釋得真得好啊!連每一個字及小節,也能詳盡加以說明,用生活上的比喻代入程式解說,使初學者更容易理解,是我看過最好的java教學,這使我獲益良多,讚^^
張貼留言