網頁

2013年3月17日 星期日

Java Programming Introduction 01: HelloWorld


大部份的程式語言, 一開始都會來一個印出 "HelloWorld!" 的小程式, 來作為程式語言的第一個實例, 這邊也不例外. 不過, 我們的說明會多一些.
 

HelloWorld 的程式碼:

HelloWorld.java

// import java.lang.*;

public class HelloWorld {

     public static void main(String[] args) {

         System.out.println("Hello! World!");   
    }
}

編譯及執行


在命令列輸入編譯指令, 以生成 HelloWorld.class 的目的檔
javac HelloWorld.java

* 必須輸入 .java 的副檔名,否則會有
Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
這個奇怪的錯誤

在命令列輸入執行指令, 以執行 HelloWorld.class 的目的檔
java HelloWorld

* 不能帶有 .class 的副檔名,否則會有另外一個錯誤
Could not find or load main class HelloWorld.class
如果你用的是中文系統, java 還會幫忙把錯誤訊息翻譯成中文
錯誤: 找不到或無法載入主要類別 HelloWord.class
 

程式碼的逐行說明


// import java.lang.*;

1. 這是一行註解, java 的註解行以 // 開始, 表示整行都是註解
2. import 表示參考的其他的 class package.
3. java.lang.* 表示 java.lang 這個 package及以下的 package, class.

Package Class
如前面程式中的 HelloWorld, 就是一個 class, 或稱為物件, 是物件導向程式設計的基本單位. 描述某一概念, 或某種型態.

package 則是一群 class 的集成. 以達到某些目的. 譬如說, java.io 這個 package, 就是提供一些 io 有關的 class, 以達到 input/output 的目的. 其中的 java.io.File class, 則是檔案有關的 io 的具體實作.

Java fully qualified name
Java fully qualified name, 是一個分類的命名原則. 做為一個軟體工程的從業人員, 一想到分類, 就應該聯想到樹狀結構. 不管是目錄的結構, 網址, 等等. 同理, Java 也是用樹狀結構來組織這些類別. 譬如說, java.lang.String 這個 class, 從名字我們就可以知道, java 這個 package 裡面有一個 lang package, lang package , 有一個 String class. class 通常以大寫開始, package 則通常都是小寫.  

所有的 java 程式, 都需要 java.lang 這個 package 才能執形. 因為都需要, 所以不用去指定, 這一個 import 的指令, 實際是可以省略的. 它的作用只是用來說明 class 及 package.

public class HelloWorld {

1. Java 基本上是一個檔案, 一個 class. 它裡面可以再定義 subclass. 作為這個檔案中的主要 class, 它必須可以被外部存取到, 否則就沒有存在的意義. 因此, 它必須是 public.

2. class 是定義 class 的關鍵字.

3. class name 的名稱, 雖然沒有強制, 但是強烈建議以駝峰式命名. 也就是字首大寫, 其餘小寫, 複數名稱連寫. 如 HelloWorld 就是 Hello 和 World  這兩個字合起來, 字首分別用大寫. 目的其實很簡單, 讓程式好讀.

4. 大刮號在右邊. Java 強烈建議, 標示程式區塊啟始的左大刮號, 放在程式碼的最右邊, 標示程式區塊結束的右大括號, 則放在新一行的最左邊. 這一個問題從有 C 語言開始, 就開始爭論.目前看起來, Java 的開發人員, 是"大刮號在右邊"的支持者較佔優勢. 相對於 Microsoft 體系下, "大刮號在左邊" 的程式風格, 我是覺得見仁見智. 但是先把這個問題律定下來, 也算是好事一樁.

     public static void main(String[] args) {

1. 作為一個可以被系統直接執行的 class, 必須要有一個進入點. 也就是 main.
2. main 必須要可以被系統存取, 所以它必須是 public.
3. main必須要可以被系統呼叫, 所以它必須是 static.
4. 系統不需要它的回傳值, 所以回傳值是 void.
5. 和 c or c++ 一樣, 它可以攜帶參數. main 的參數, 是一個字串陣列.

          System.out.println("Hello! World!"); 

1. 這是呼叫 java.lang.System 這個 class 的 out 這個 成員的 println 的 方法
java.lang.System 這個 class, 裡面有一個 out 的 member:

static PrintStream out;

而 PrintStream 又有一個 println 的 method

void println( char[] x );

所以, 整個敘述, 可以翻譯成中文:

呼叫 java.lang 這個 package 的 System 的 class 中, 名稱為 out 的 PrintStream 的 class 的 println 的函式.

2. member & method
在物件導向的程式語言中, 通常會把包含在這個 class 中的變數稱為 member data, class 中的函式, 稱為 member method. 有時又簡稱 member data 為 member, member method 為 method.

3. System.out
System.out其實就是 C/C++ 環境下的標準輸出, stdout.
System.in 就是標準輸入 stdin.
System.err就是標準錯誤裝置 stderr.

 

 

沒有留言:

張貼留言

請提供您寶貴的意見