wiki:Java_Lab1

Version 15 (modified by jazz, 14 years ago) (diff)

--

從 C++ 到 Java : 入門級爪哇程式練習

練習一: 基本爪哇程式編譯指令與執行方法

  • 下載 Java TutorialHelloWorldApp.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 類別。
      class HelloWorldApp { // 未註明時預設為 private 類別
      
    • 驗證一:試著把 HelloWorldApp.java 更名為 HelloWorld.java 然後重新編譯。結果:會過!!因為是 private 類別 ~
      hadoop004@hadoop:~$ mv HelloWorldApp.java HelloWorld.java
      hadoop004@hadoop:~$ javac HelloWorld.java
      
    • 驗證二:試著修改 HelloWorld.java 的程式,在類別前加入 public 關鍵字,然後重新編譯。結果:有錯誤訊息!! 因為是 public 類別 ~
      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 變數。註:若要撰寫可以鑲嵌在網頁的程式,必須繼承 Applet 類別,其進入點就不是 main 函數,而是 init 函數。
    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) 函數。
    System.out.println("Hello World!");
    

練習二:慢慢長大的類別 ─ public, private, field, method

  • 讓我們來練習設計一個複雜一點的類別,若是以 UML (Unified Modeling Language) 來呈現的話,大致上可以畫成底下這張圖:

hadoop004@hadoop:~$ cat > Test.java <<EOF
import java.io.*;
import java.lang.String;

public class Test
{
  public String myData;

  public String getMyData()
  {
    return myData;
  }

  public void setMyData(String data)
  {
    myData = new String(data);
  }

  public static void main(String args[]) {
    Test myTest = new Test();
    myTest.setMyData("This is a test");
    System.out.print(myTest.getMyData());
  }
}
EOF
  • 嘗試編譯,並觀察結果
    hadoop004@hadoop:~$ javac Test.java
    hadoop004@hadoop:~$ java Test
    
  • 根據上圖,嘗試加入

Attachments (1)

Download all attachments as: .zip