3     Java程式的長相

Java程式的基本單位是類別(class),一個類別(X)可以呼叫使用其他類別(AA1),一個類別(A)可以被延用並擴展為其他類別(A1A2)

 

圖3-1 

 

[3-1類別]

※類別是Java程式碼的集合。

※類別成員有field(稱為欄位或資料或變數)method(稱為方法或操作或函式)

※具有名稱為main之方法的類別,稱為主類別,可單獨執行。非主類別的類別(將稱為一般類別)必須由主類別呼叫使用。一般類別亦可呼叫使用其他主類別或一般類別。

 

格式:[ public|abstract|final ] class 類別名稱 {

       欄位(Field)宣告

       方法(Method)宣告

}

下面類別的範例為本資料的第一支程式,一般坊間書本的第一支程式總是一成不變的列印顯示"Hello world",筆者特以抄來之論語學而篇文章的第一句英譯,將之列印顯示出來,希望大家抱持此一心態來學習Java程式語言。

<>類別

public class ConfucianAnalects{ //定義類別,名稱為ConfucianAnalects

static String header = "學而篇"; //定義欄位,名稱為header

public static void main(String[] args){ //main方法

   System.out.println(header); //列印變數內容並改行

   System.out.print("Is it not pleasant to learn with a "); //顯示""中的文字

System.out.println("constant perseverance and application?");

   }

}

說明:

class為關鍵字,宣告定義一個類別,其後接類別名稱ConfucianAnalects

※類別名稱常由有意義之文字組成,習慣上各單字的第一個字母使用大寫。

※定義靜態字串欄位header,初期值為"學而篇"

※方法名稱為main,本類別含main方法,故為主類別,為可執行之類別。

Java程式由主類別之main方法開始執行。

public表示本類別或方法可被其他類別或物件存取使用,後面章節會再說明。

//起至行末為註解,編譯程式不視為有效程式碼。另有可跨行之註解方式---

/*                 */

System.out.print為內建物件之方法,會列印顯示""中的文字,列印後不跳行,

System.out.println則為列印後不跳行。

※外層{}內為類別之內容,內層{}為方法之內容。一般{}採內縮式較為明確,但無強制規定。

※每一敘述式皆以;結束。

※本類別沒有欄位宣告。

(註:如無特別標明,本資料之原始碼檔將放置於C槽的js資料夾,於命令提示字元下執行時,需以cd命令切換至該資料夾下)

 

使用記事本軟體將上述程式碼編輯儲存至C槽之js資料夾,副檔名為.java

在命令提示字元上執行:

Windows 7:開始>所有程式>附屬應用程式>命令提示字元

C:\Users\CTC-Mobile>

切換目錄至原始碼檔所在目錄:C槽之js資料夾

C:\Users\CTC-Mobile>cd C:\js

沒特別指定時,由目前資料夾取出原始碼檔,編譯(javac)類別ConfucianAnalects,須指定副檔名.java。沒特別指定時,位元碼檔存放至原始碼檔同一資料夾

C:\js>javac ConfucianAnalects.java

執行(java)類別ConfucianAnalects,不須指定副檔名.class

C:\js>java ConfucianAnalects

學而篇

Is it not pleasant to learn with a constant perseverance and application?

 

[3-1-1主類別及一般類別]

凡是含主方法(名稱為main之方法)之類別稱為主類別,可單獨執行。一般類別不含主方法,不可單獨執行,必須透過主類別建立其物件,並呼叫其方法執行。主類別也可以被另一主類別呼叫建立物件執行。

[3-1-2類別的成員]

類別成員包含欄位及方法。

[欄位field]

欄位為程式執行時存放資料的地方,有各種型態,如整數、浮點數等。

[方法method]

方法為程式進行進行運算及操作(如列印顯示)的地方。

 

<>主類別

計算兩數yz之和x,並顯示於命令列。

class Disp1 {                            //以關鍵字class宣告類別disp1

public static void main(String[] args) {     //方法(函式)宣告,本例為主方法

int x, y, z;                            //整數欄位xyz宣告

y = 10;                              //指定運算

z = 15;                              //指定運算

x = y + z;                          //加法及指定運算

System.out.println("x的值是" + x);       //呼叫系統內建類別的方法(函式)

   }                                   //()方法結束

}                                     //()類別結束

命令提示字元下輸入

C:\js>java Disp1

執行結果:x的值是25

 

<>一般類別

class Disp2 {                           //以關鍵字class宣告類別disp2

int m = 11, n = 12;                    //欄位宣告並指定其值(指定運算)

void dispMethod2() {                //方法宣告,本例為一般方法

System.out.println("m+n="+ (m+n));     //呼叫系統內建類別的方法(函式)

   }                                 //(一般)方法結束

}                                   //(一般)類別結束

一般類別不可單獨執行。

 

<>主類別+一般類別

class Disp3g {

int m = 15, n = 22;                  //欄位宣告並指定其值(指定運算)

void dispMethod3() {                //(一般)方法宣告

System.out.println("m+n=" + (m+n));    //呼叫系統內建類別的方法(函式)

   }

}

 

class MainDisp3m {

public static void main(String[] args) {     //方法(函式)宣告

Disp3g dd = new Disp3g();              //建立類別disp3g之物件dd

dd.m = 27;                          //物件欄位運算

dd.n = 12;                            //物件欄位運算

dd.dispMethod3();                    //呼叫物件方法

   }

}

命令提示字元下輸入C:\js>java MainDisp3m

執行結果:m+n=39

 

說明:

[註解行說明]

//開始直到行末為註解行,編譯器將不視為程式碼。

/*         */圍住範圍為註解行,可跨行,編譯器亦不視為程式碼。

 

[內建類別System的方法]

System.out.println:顯示列印後改行,下一列印由新行開始列印。

System.out.print:顯示列印後不改行,下一列印接續原行列印。

格式:

System.out.println(n1+n2+n3+…..)

n1n2n3可為文字(需置於" ")或變數或計算式(需置於())或方法(有回傳值)等,方法時為列印回傳值。

+號為連接之意,即n1n2n3等視為字串連成一大字串。

後續將陸續出現System.out.printlnSystem.out.print範例。

 

[3-2物件]

如果將類別視為藍圖,則物件即為依據藍圖所建築的房子,或所造的機器等,可造出複數個。藍圖可視為不占空間,但房子、機器等則占有龐大空間,如前述,類別(主類別亦可)建立物件後會分配記憶體給欄位,一個類別可建立多個物件,並各自配置有記憶體,不會互相干擾。

 

建立物件格式:

類別物件名稱 = new 類別([建構子參數列]);

類別物件名稱;

物件名稱 = new 類別([建構子參數列]);

[註:因建構子名稱和類別一樣,也有人直接將上式底線部分直接稱為建構子]

 

例:obj1 xx = new obj1();   //建立類別obj1的物件xx,沒有建構子參數

  

   obj1 xx;

xx = new obj1();       //建構子於後述章節說明

 

<>物件

class Obj1 {

int m = 15, n = 22;      

void objMethod1() {    

System.out.println("m+n=" + (m+n));      

   }

}

class MainObj1 {

public static void main(String[] args) {    

Obj1 xx = new Obj1();   //建立類別obj1之物件xx

Obj1 yy = new Obj1();   //建立類別obj1之物件yy

xx.m = 27;             //物件欄位運算

yy.m = 30;

xx.n = 12;             //物件欄位運算

xx.objMethod1();       //呼叫xx物件方法

yy.objMethod1();        //呼叫yy物件方法

   }

}

命令提示字元下輸入C:\js>java mainObj1

執行結果:m+n=39

         m+n=52

 

[3-3靜態(static)類別、非靜態(non-static)類別]

主類別因具static主方法,為靜態類別,不需建立物件即可執行,其他非靜態類別則須建立物件才可執行。靜態方法內之欄位(資料)為靜態欄位,說明見後述。

 

[3-4繼承]

類別是Java程式的基本單位,繼承則是Java程式的重要的功能。類別可透過繼承擴充或改變功能,被繼承之類別稱為父類別,繼承的類別稱為子類別。父類別及子類別皆可分別建立一個或多個物件。繼承使用extends關鍵字。

 

格式:

class 子類別(新類別) extends 父類別(既存類別){覆寫、新增欄位及方法等}

 

<>繼承

class Father1 { //父類別(既存類別)

int x = 7;

char y = 'a';

void fatherMethod1( ) {

   System.out.println(y + "=" + x) ; } }

 

class Son1 extends Father1 { }   //子類別單純繼承(不改變父類別)

class Son2 extends Father1 {     //繼承並覆寫方法

void fatherMethod1() {

   System.out.println("son2 x=" + x + " y=" + y); } }

class Son3 extends Father1 {     //繼承並增加功能,原欄位及方法仍保留

int z = 100;                 //新增欄位z

void fatherMethod2() {       //新增方法fatherMethod2

   System.out.println("son3 x=" + x + " y=" + y + " z=" + z); } }

 

class MainExtends1 {

   public static void main(String[ ] args) {

     Father1 A = new Father1( ) ;

     A.fatherMethod1();

     Son1 B = new Son1();

     B.fatherMethod1();

     Son2 C = new Son2();

     C.fatherMethod1();

     Son3 D = new Son3();

     D.fatherMethod1();

     D.fatherMethod2();   } }

命令提示字元下輸入C:\js>java mainExtends1

執行結果:a=7

         a=7

         son2 x=7 y=a

         a=7

         son3 x=7 y=a z=100

說明:

繼承後基本上子類別將保有原父類別上所有功能,包括欄位及方法,並可覆蓋及新增欄位及方法。

[3-5關鍵字或稱保留字]

關鍵字為Java保留為系統使用,有其特殊意義,不得用於類別、物件、欄位等名稱。如下列:

abstractcaseclassconstdefaultdoelseextendsfalsefinal

friendimplementsinterfacenativeprivateprotectedpublicreturn

shiftstaticsupersynchronizedthisthrowthrowstruetryvirtual

voidvolatile

保留字可能會因新舊版本而有增減。

 

<再論命令提示字元使用方式>

Java原始碼可以記事本編輯,儲存時副檔名指定為.java,經命令提示字元畫面輸入編譯指令javac,成為副檔名.class之位元檔後,即可用java命令執行。

 

進入:開始功能表->所有程式->附屬應用程式->命令提示字元

 

C:\Users\CTC-Mobile>             (各人顯示皆不同)

 

切換至java程式原始碼所在資料夾(cd命令,資料夾為C:\js)

 

C:\Users\CTC-Mobile>cd C:\js

 

編譯:輸入java程式編譯指令javac,原始碼須指定副檔名.java

 

C:\js>javac Disp1.java

 

執行:輸入java程式執行指令java,位元碼不須指定副檔名.class

 

C:\js>java Disp1

x的值是25                     //輸出

 

 

 

本章節說明Java的大概樣子,下一章起進入詳細說明。

arrow
arrow
    文章標籤
    java 類別 欄位
    全站熱搜

    祈泊 發表在 痞客邦 留言(0) 人氣()