大部份的程式語言, 一開始都會來一個印出
"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 的參數, 是一個字串陣列.
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.
沒有留言:
張貼留言
請提供您寶貴的意見