[[PageOutline]] = 從 C++ 到 Java : 入門級爪哇程式練習 = * 實驗環境:請至 http://hadoop.nchc.org.tw 申請帳號,並用網頁帳號登入系統,或用 SSH 系統帳號登入系統。 * 註:Windows 操作請參考[grid:wiki:jazz/09-07-06 2009-07-06 成大工科實習生 Java 教學(一)] == 練習一: 基本爪哇程式編譯指令與執行方法 == * 下載 [http://java.sun.com/docs/books/tutorial/ Java Tutorial] 的 [http://java.sun.com/docs/books/tutorial/getStarted/application/examples/HelloWorldApp.java HelloWorldApp.java] 範例程式原始碼 {{{ hadoop004@hadoop:~$ wget http://java.sun.com/docs/books/tutorial/getStarted/application/examples/HelloWorldApp.java hadoop004@hadoop:~$ javac HelloWorldApp.java }}} * 執行 !HelloWorldApp 範例程式 {{{ hadoop004@hadoop:~$ java HelloWorldApp }}} * 程式解說: * Java 程式原始碼,檔案名稱必須與類別名稱一致。一個程式原始碼若有多於一個的類別,只有一個可以是 public 類別,其餘必須是 private 或內部類別(inner class)。若不加 public 或 private 預留關鍵字,則預設為 private 類別。 {{{ #!java class HelloWorldApp { // 未註明時預設為 private 類別 }}} * 驗證一:試著把 !HelloWorldApp.java 更名為 !HelloWorld.java 然後重新編譯。結果:會過!!因為是 private 類別 ~ {{{ hadoop004@hadoop:~$ mv HelloWorldApp.java HelloWorld.java hadoop004@hadoop:~$ javac HelloWorld.java }}} * 驗證二:試著修改 !HelloWorld.java 的程式,在類別前加入 public 關鍵字,然後重新編譯。結果:有錯誤訊息!! 因為是 public 類別 ~ {{{ #!java public class HelloWorldApp { // 若 public 類別名稱為 HelloWorldApp ,程式碼檔名也必須為 HelloWorldApp.java }}} {{{ hadoop004@hadoop:~$ javac HelloWorld.java HelloWorld.java:36: class HelloWorldApp is public, should be declared in a file named HelloWorldApp.java public class HelloWorldApp { ^ 1 error }}} * 與 C/C++ 相似,Java Application 主程式的進入點為 main 函數,唯其型態比較複雜,必須為 public static void,宣告為 public 其他類別才可以呼叫,宣告為 static 才能直接透過類別名稱呼叫,void 代表沒有回傳値。程式的參數以 String 類別型態傳入,類似 C/C++ 的 argv 變數。註:若要撰寫可以鑲嵌在網頁的程式,必須繼承 [http://java.sun.com/javase/6/docs/api/java/applet/Applet.html Applet 類別],其進入點就不是 main 函數,而是 init 函數。 {{{ #!java public static void main(String[] args) }}} * Java Application (類似 DOS 底下的 C/C++ 命令列程式) 可以用 System.out.println() 函數來顯示字串,可想成對應 C 的 printf() 函數,或 C++ 的 cout。註:從物件導向的觀念來看,out 是 System 類別的 static field,因此可以直接透過類別名稱取得。out 的型態是 PrintStream,所以可以直接透過 out 這個 PrintStream 物件來呼叫 print(String s) 函數。 {{{ #!java System.out.println("Hello World!"); }}} == 練習二:慢慢長大的類別 ─ public, private, field, method == * 讓我們來練習設計一個複雜一點的類別,若是以 UML (Unified Modeling Language) 來呈現的話,大致上可以畫成底下這張圖: [[Image(wiki:Java_Lab1:Test_HW01.png)]] {{{ #!java hadoop004@hadoop:~$ cat > Test.java <