1-3.3字串常值(String literal)

2011年9月30日 星期五

| | | 0 意見
1-3.3字串常值(String literal)
System.out.println("完成了!!");                       //輸出至營幕顯示。
System.out.println("第 一支JAVA程式。");    //輸出至營幕顯示。


       
       上圖中包雙引號中的文字列 ("完成了!!") 及 ("第 一支JAVA程式。") 即為字串常值。關於字串常值的詳細知識將會在之後討論。除了字串常值,還有字元常值、整數常值、浮點數常值等。

字串的連結

Chap1_3_2.java
/**
輸出顯示 "早安! 陳先生。"
*/

class Chap1_3_2{
public static void main(String[] args){
System.out.println("早安!" + "陳先生。");
}
}


執行結果
早安!陳先生。

程式說明:
      以上的範例程式是由二個字串常值透過加號(+)連結起來。從結果我們可以很容易的發現,加號可以連結字串常值。

由一行途述式顯式換行

Chap1_3_3.java
/**
輸出顯示 "早安!
                陳先生。"
*/

class Chap1_3_3{
public static void main(String[] args){
System.out.println("早安! \n陳先生。");
}
}


執行結果
早安!
陳先生。
程式說明
      “\n” 稱為換行字元(newline characters),是一種特殊字元。目的是在執行時將游標放在命令視窗的下一行開頭處。

標準輸出

Chap1_3_4.java
class Chap1_3_4{
  public static void main(String[] args){
        System.out.println("早安! \n陳先生。-------(1)");
        System.out.println("早安!");
        System.out.println(" 陳先生。-------(2)");
        System.out.println(); //換行                         
        System.out.print("早安!");
        System.out.print(" 陳先生。-------(3)");
        System.out.println(); //換行
        System.out.print("早安! \n陳先生-------(4)");
  }
}

執行結果
早安!
陳先生。-------(1)
早安!
陳先生。-------(2)

早安!陳先生。-------(3)
早安!
陳先生。-------(4)

程式說明:
       System.out 即標準輸出物件。可以在Java執行時,於命令視窗裡顯示字串。print() 和 println() 即為此物件的二個方法(method)。如同之前提過的 main 方法,關於方法的詳細知識在之後的章節會在介紹。現在,先了解如何使用這二個方法。
System.out.println(); -------- 以標準輸出方式顯示,自動換行。
System.out.print();    -------- 以標準輸出方式顯示,不換行。

圖1-
      println() 中 ln 的意思就是 Line , 使用這個方法就是要求程式在執行完此行後,游標移至下一行開始處。可以由以上的範例程式中容易的觀察出兩者的不同。
      如果括號中為空白,將不會有任何文字顯示,如以上可知,將會執行換行。

思考題

Err1_3_6.java
//輸出顯示 "我們即將完成第一章!"

class Err1_3_6{
public static void main(String[] args){
System.out.println("我們即將完成第一章!);
}
}

錯誤訊息
D:\docs\chap1\err\Err1_3_6.java:6: unclosed string literal
System.out.println("我們即將完成第一章!);
                  ^
D:\docs\chap1\err\Err1_3_6.java:6: ';' expected
System.out.println("我們即將完成第一章!);
                               ^
D:\docs\chap1\err\Err1_3_6.java:8: reached end of file while parsing
}
^
3 errors


練習題1-2
       輸出下圖結果至畫面顯示。
1,2,3,
4,5,6,
7,8,9,


練習題1-3
      將上題的結果,每行間增加一行空行。
1,2,3,

4,5,6,

7,8,9,


       

1-3.2 Java程式架構及行規

| | | 0 意見
1-3.2 Java程式架構及行規

       我們將直接使用範例程式Chap1_3_1.java,來探討Java式語言的架構。另外,在每一種程式語言都有其行規。行規指的是大部份程式設計師在編寫程式是所共同遵守的規範。程式不只是寫給自己看而已,當一支程式編寫完成後,有可能會因為各種不同的原因需要交接給其他人。此時,一種共同的編寫習慣和共識是必要的。

       現在,我們在範例程式

Chap1_3_1.java
/*
這是我的第一支 JAVA程式
傳統式註解。多行註解
*/

/**
這是我的第一支 JAVA程式
文件註解,雙星備註
*/

//這是我的第一支 JAVA程式。
//單行註解。行尾註解
                                                                                                                                                     
class Chap1_3_1 {
  public static void main(String[] args) {

System.out.println("完成了!!");                       //輸出至營幕顯示。
System.out.println("第 一支JAVA程式。");    //輸出至營幕顯示。
  }
}

圖1-
註解(comment)
      在圖的最上方為三種不同的註解格式。 程式設計師可以將註解加入程式中,用以增進程式的可讀性。註解可以幫助設計師身及所有使用這個程式的人閱讀及了解。在程式中加入適當的註解除了可以幫助閱讀理解程式之外。同時,設計者本身要永遠記得本身所編寫的程式也是非常困難的。所以,簡潔明了的敘述在註解中是很重要的。
      當程式執行的時候,Java 會忽略註解。因此當執行程式時,Java會自動跳過註解的部分不會執行任何動作。通常會在每個程式的開頭加上註解,記錄目的、程式碼檔名、編號、版本及作者。

(1)傳統式註解(Tranditional comment)
           又稱多行註解(Multiple-line comments)。
/*
這是我的第一支 JAVA程式
傳統式註解。多行註解
*/


       以 /* 開始 */ 結束。中間的文字部分即為註解。可跨越多行。
[重要]不要將 * 及 / 的順序寫錯,寫成 \ 又或是漏掉結束的 */。

(2)文件註解(Documentation comment)
           又稱為雙星備註。
/**
這是我的第一支 JAVA程式
文件註解
*/


       以 /** 開始 */ 結束。同(1)可跨越多行。透過 javadoc 可產生類似程式說明的網頁文件。

[重要]是以二個星號 /** 開始,不可少了一個。其它的如同(1)。

(3)單行註解(Single-line comment)
           又稱為行尾註解(End of line comment)
//這是我的第一支 JAVA程式。
//單行註解。行尾註解

      以 // 開始的註解,直到該行的最後。通常放在程式碼一行的最後面,用來描述此行程式的目的。又可稱行尾註解。它不可跨越多行,所以適合較簡短的註解。

       在開發程式時期。程式設計師會遇到 “這一行或是這幾行程式或許有錯誤。如果 ,刪除此行或是這幾行,執行結果會有何不同。但是,因此刪除程式碼,將會在之後可能須要復原時造成困擾。” 的情況。
        此時,使用註解是一種方便的處理方式。

[重要]行規:在每個程式開始之處,都加上註解,說明程式的目的、作者、版本、時間、日
                   期。在程式碼之後加入單行註解助人助己。

類別宣告
      上圖中顏色的部份為java程式中最主要的架構。我們可以了解,Java程式的基本格式如下圖。
class 類別名稱 {
   main 方法…
}

圖1-
     每個Java程式至少有一個類別,類別是由程式設計師加以定義。這些類別即為使用者定義類別(user-defined classes).
     原始碼的”類別名稱”須與原始碼的”檔案名稱”相同(大、小寫也須相同)。例如,檔案名稱為Aa.java 則類別名稱則必須為 Aa。如果不相同時(如類別名稱為aa), 則可以順利編譯,但是執行時會失敗。
      類別名稱,是由一串字母、數字、底線(_)組成。而且,不能以數字開頭以及含有任何的空白。同時,在java的行規中,類別名稱第一個字母為大寫。

[重要]行規:類別名稱以及類別名稱內的所有單字的第一個字母都是大寫。例如: “class
                   Tester”  或 “class MyTester”。

[重要]Java 對於大小寫有區分的。所以”類別名稱”和”檔案名稱”必須完全一致,尤其注意
          大小寫,依照行規編寫可避免此類形的錯誤。

[重要]研讀Java程式時,先尋找以大寫字母為開頭的部分。這些通常為Java類別的開始。

main方法
   public static void main(String[] args) {
       方法的本體
   }

圖1-
   上圖為main方法(main method)的宣告及撰寫方式。
   Java程式中可以包含多個方法(method),但是,在一支Java程式的類別中只能有一個 main 方法。同時,這也是每個Java程式的起始點。main 後面的括號部分 (String[] args) 為方法的組成部份。將這個部分視為固定格式,在之後的章節將會討論相關知識。

[重點]利用空行可以增加程式碼的可讀性。例如:圖1-中在main方法的上方增加一行空白
          行。

[重要]括號必須成對出現。即當使用了左括號,不可忘了右括號。當輸入左括號時,可接
          著輸入右括號,後在輸入中間的部分。可以避免此錯誤。

縮排
       如同一篇散文的分段, 可以幫助讀者閱讀。在編寫程式時將程式以”段落區塊”的方式展現,同時可以幫助自己和其他人研讀。在段落中敘述式的右邊往左空幾個字元,即稱為縮排,可以使得程式的架構一目了然。

[重點]行規:縮排。如圖1-中,類別名稱(class Chap1_3_1)及main方法的開始(public
                  …..)的位置,以及main方法內的敘述式。全部往內縮一層。使用相同的縮排
                  量,前後使用一致。

方法的本體
public static void main(String[] args) {

System.out.println("完成了!!");                       //輸出至營幕顯示。-------(1)
System.out.println("第 一支JAVA程式。");    //輸出至營幕顯示。--------(2)
  }


       依上圖,被main方法的大括號包起來縮排的部分,即為這個方法的本體。方法的本體由敘述式(Statement)組成。當程式執行時會由上往下依序執行每行敘述式。原則上,每行的結束必須使用分號(;)。依上圖及範例程式Chap1_3_1.java的執行結果,可以很明顯觀察出,(1)是先被執行,然後才是(2)。

[重要]原則上,在每行結尾,必須用分號(;)。

練習題1-1
       修改範例程式Chap1_3_1.java,將第一行敘述(System.out.println("完成了!!"); )改成註解。

思考題

Err1_3_1
class Err1_3_1 {
public static void main(String[] args){

/**
思考題是一般初學者常會犯的錯誤。
從思考題中可協助你,加深印象。
學習如何從錯誤訊息中尋找細索,是每個工程師應有的能力。
不要害怕或是抗拒錯誤訊息,它們是你的好朋友。
/
System.out.println("Hello! World!");
}
}

錯誤訊息
D:\docs\chap1\err\Err1_3_1.java:3: unclosed comment
/**
^
D:\docs\chap1\err\Err1_3_1.java:12: reached end of file while parsing
}
^
2 errors


思考題

Err1_3_2
/**
不管錯誤訊息有多少行,
先只看最上面的第一行。
*/

class err1_3_2{
      public static void main(String[] args){
System.out.println("Hello! World!");
}
}

錯誤訊息
java.lang.NoClassDefFoundError: Err1_3_2 (wrong name: err1_3_2)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Err1_3_2.  Program will exit.
Exception in thread "main"


思考題

Err1_3_3
/**
不管錯誤訊息有多少行,
先只看最上面的第一行。
*/

class Err1_3_3{
public static void main(String[] args){
System.out.println("Hello! World!")
}
}

錯誤訊息
D:\docs\chap1\err\Err1_3_3.java:4: ';' expected
System.out.println("Hello! World!")
                                  ^
1 error


思考題

Err1_3_4
/**
不管錯誤訊息有多少行,
先只看最上面的第一行。
*/

class Err1_3_4{
public static void main(String{} args){
System.out.println("Hello! World!");
}
}

錯誤訊息
D:\docs\chap1\err\Err1_3_4.java:2: <identifier> expected
public static void main(String{} args){
                             ^
D:\docs\chap1\err\Err1_3_4.java:2: ';' expected
public static void main(String{} args){
                              ^
D:\docs\chap1\err\Err1_3_4.java:2: <identifier> expected
public static void main(String{} args){
                                    ^
D:\docs\chap1\err\Err1_3_4.java:4: ';' expected
System.out.println("Hello! World!")
                                  ^
4 errors


思考題

Err1_3_5
/**
不管錯誤訊息有多少行,
先只看最上面的第一行。
*/

class Err1_3_4{
public static void main(String[] args){
System.out.println("Hello! World!");
}

錯誤訊息
D:\docs\chap1\err\Err1_3_5.java:10: reached end of file while parsing
}
^
1 error