• 沒有找到結果。

161

執行結果:

無名區塊執行中

無名區塊執行完畢時Var=100 建構函式執行中

建構函式執行完畢時Var=10 使用物件呼叫時Var=10

24 25 26 27 28 29 30 31 32 33

public void show(String str) {

System.out.println(str+ "Var=" + Var);

} {

Var=100;

System.out.println("無名區塊執行中");

show("無名區塊執行完畢時");

} }

7.10.5類別內的無名區段

無名區段

範例說明:

由執行結果中可以發現,無名區段會在建構函式開始前 就先被執行。而如果您將第10行的new敘述去除,例如 改寫為CMyClass X;(當然第11行必須刪除)則無名區 段也不會被執行,因為物件實體尚未產生。

7.10.5類別內的無名區段

163

在本章中,我們簡單介紹了物件導向程式設 計的三大特性,包含封裝性、繼承性與多型 性。我們也初次嘗試透過一般類別(非主類 別)與物件來設計程式,在這兩個主題之下

,我們學習到了下列相關技術:

(1)類別是Java物件導向程式最基本的單元,是產生同一 類物件的基礎,類別其實是一種使用者自定的資料型態,

並且Java的類別成員可以定義為多種資料存取等級如下,

  不寫:類別庫(package)等級。

  public:公用等級。

  private:私用等級。

  protected:保護等級。

7.11 本章回顧

(2)公用資料變數與函式允許由類別以外的外部程式存取 或執行,但私用資料變數與成員函式只允許被同一個類別 中的函式存取或執行。至於保護等級則留待繼承一章再作 介紹。類別庫等級則允許同屬一個類別庫的類別存取或執 行。Java藉由資料等級達到了物件導向的「封裝性」特性

(3)物件是類別的實體,使用類別資料型態宣告物件時,

並未產生物件實體,必須透過new運算子才會產生物件實 體。

(4)物件存取其變數與方法的語法如下:

(5)當物件實體透過new生成後,會馬上自動執行建構函式

(建構子),而建構函式的名稱與類別名稱相同,並允許 多載。

物件.成員資料

物件.成員函式(引數列)

7.11 本章回顧

165

(6)若未定義任何建構函式,則Java編譯器會自動產生一 個內建的預設建構函式(Default Constructor),其函式 內容為空,也沒有參數。但若定義了一個以上的建構函式 時,則不會產生預設建構函式。

(7)多載(overload)允許重複定義多個同名的成員函式或 建構函式,只要署名不同即可,使得程式設計具有更大的 彈性。Java藉由多載(及其他技術)達到了物件導向的「

多型性」特性。

(8)當物件實體不被任何物件變數參考時,Java的回收機 制就會在一段時間後自動回收該物件實體的記憶體空間。

(9)函式呼叫時,若引數為物件,則採用的是傳參考值呼 叫,因為物件變數本身是一個參考。傳參考值呼叫仍屬於 傳值呼叫的一種,只不過傳遞的值是一個參考。

(10)對於任何類別而言,this在實際執行時,代表類別生 成的物件本身(也就是一個物件參考)。

7.11 本章回顧

(11)在類別內以static宣告成員變數或成員函式時,代表 宣告類別變數與類別方法。此時不需要產生物件就可以執 行類別方法,而所有該類別生成的物件也將共用類別變數

。在類別方法中不能使用this關鍵字。

(12)在類別內宣告成員變數或成員函式時,如果沒有加上 static修飾字,則稱為實體變數(Instance Variables)與 實體方法(Instance Methods)。顧名思義,它必須在產生 物件實體後才能夠被存取與呼叫。

7.11 本章回顧

延伸學習:巢狀類別

巢狀類別指的是類別內又定義了另一個類別,由於巢狀類別的語法較為複雜,因此 在本章先不介紹,但是由於視窗程式常會使用內部類別(也屬於巢狀類別)實作一 個事件傾聽者,因此,我們會在視窗程式設計單元介紹巢狀類別。

延伸學習:巢狀類別

巢狀類別指的是類別內又定義了另一個類別,由於巢狀類別的語法較為複雜,因此

在本章先不介紹,但是由於視窗程式常會使用內部類別(也屬於巢狀類別)實作一

個事件傾聽者,因此,我們會在視窗程式設計單元介紹巢狀類別。

相關文件