Liang Introduction to Java Programming Ninth Edition c




























![範例 Java並不會為方法內的區域變數指定預設值 public class Test { public static void main(String[] args) { int x; 範例 Java並不會為方法內的區域變數指定預設值 public class Test { public static void main(String[] args) { int x;](https://slidetodoc.com/presentation_image_h2/b40d18168972cbb6f369faa8a159207f/image-29.jpg)






























![物件陣列 Circle[] circle. Array = new Circle[10]; 物件陣列實際上即是一個址參變數陣列。 因此,呼叫circle. Array[1]. get. Area() 涉及兩 層的址參,如圖 物件陣列 Circle[] circle. Array = new Circle[10]; 物件陣列實際上即是一個址參變數陣列。 因此,呼叫circle. Array[1]. get. Area() 涉及兩 層的址參,如圖](https://slidetodoc.com/presentation_image_h2/b40d18168972cbb6f369faa8a159207f/image-60.jpg)
![物件陣列 Circle[] circle. Array = new Circle[10]; Liang, Introduction to Java Programming, Ninth Edition, 物件陣列 Circle[] circle. Array = new Circle[10]; Liang, Introduction to Java Programming, Ninth Edition,](https://slidetodoc.com/presentation_image_h2/b40d18168972cbb6f369faa8a159207f/image-61.jpg)

- Slides: 62
第八章 物件與類別 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1
物件 物件(object)由狀態(state)和行為(behvior)組成。 狀態定義物件,行為決定物件的動作。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 5
類別 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 7
利用UML表示法來表示 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 8
範例程式 8. 1 Test. Simple. Circle. java F 目的:演示建立物件、指定數據與使用 方法。 Test. Simple. Circle Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 9
範例程式 8. 3 TV. java 範例程式 8. 4 Test. TV. java F 目的:演示建立物件、指定數據與使用 方法。 TV Test. TV Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 10
建構函式 Circle() { } 建構函式(constructor)為一 個特別的方法,用以建構 物件。 Circle(double new. Radius) { radius = new. Radius; } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 11
利用建構函式建立物件 new Class. Name(); 範例: new Circle(); new Circle(5. 0); Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 13
透過址參變數存取物件 物件的存取可透過址參變數(reference variables),也就 是指向物件的參考。 這類變數可使用以下語法宣告: Class. Name object. Ref. Var; 範例: Circle my. Circle; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 15
宣告/建立物件於同一敘述 Class. Name object. Ref. Var = new Class. Name(); 指定址參變數 建立一個物件 範例: Circle my. Circle = new Circle(); Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 16
存取物件資料與方法 F 物件裡的資料項目: object. Ref. Var. data e. g. , my. Circle. radius F 呼叫物件裡的方法: object. Ref. Var. method. Name(arguments) e. g. , my. Circle. get. Area() Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 17
animation 追蹤程式碼 宣告 my. Circle = new Circle(5. 0); my. Circle no value SCircle your. Circle = new Circle(); your. Circle. radius = 100; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 18
animation 追蹤程式碼 Circle my. Circle = new Circle(5. 0); my. Circle no value Circle your. Circle = new Circle(); your. Circle. radius = 100; 建立一個 Circle 物件 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 19
animation 追蹤程式碼 Circle my. Circle = new Circle(5. 0); my. Circle reference value Circle your. Circle = new Circle(); your. Circle. radius = 100; 指定址參變數給 my. Circle Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 20
animation 追蹤程式碼 Circle my. Circle = new Circle(5. 0); my. Circle reference value your. Circle no value Circle your. Circle = new Circle(); your. Circle. radius = 100; 宣告 your. Circle Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 21
animation 追蹤程式碼 Circle my. Circle = new Circle(5. 0); my. Circle reference value your. Circle no value Circle your. Circle = new Circle(); your. Circle. radius = 100; 建立一個新的 Circle 物件 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 22
animation 追蹤程式碼 Circle my. Circle = new Circle(5. 0); my. Circle reference value Circle your. Circle = new Circle(); your. Circle. radius = 100; your. Circle reference value 指定址參變數給 your. Circle Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 23
animation 追蹤程式碼 Circle my. Circle = new Circle(5. 0); my. Circle reference value Circle your. Circle = new Circle(); your. Circle. radius = 100; your. Circle reference value 改變your. Circle中 的變數radius Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 24
警告 還記得我們曾經利用: Math. method. Name(arguments) (e. g. , Math. pow(3, 2. 5)) 來呼叫Math類別裡的方法。我們可否利用Circle. get. Area() 來呼叫 get. Area() 呢?答案是不行。 Math類別裡的所有方法都是靜態方法, 也就是使用static關鍵字所定義的。然而,get. Area() 是個實例方法, 而非靜態。因此必須透過物件來呼叫,利用: object. Ref. Var. method. Name(arguments) (e. g. , my. Circle. get. Area()). 更進一步的討論可見8. 7小節 ” 靜態變數、常數及方法 “ 。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 25
參考資料項目可以是址參型態。比方說,以下這個Student 類別包含一個String型態的資料項目name。 public class Student { String name; // name has default value null int age; // age has default value 0 boolean is. Science. Major; // is. Science. Major has default value false char gender; // c has default value 'u 0000' } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 26
null值 如果址參型態的資料項目沒指向任何物件, 該資料型態即儲存了一個特殊的Java值, null。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 27
資料項目預設值 址參型態的資料項目預設值(default field values) 為null,數值型態的預設值為 0,布林型態為 false,char型態則為u 0000。然而,Java並不會 為方法內的區域變數指定預設值。 public class Test { public static void main(String[] args) { Student student = new Student(); System. out. println("name? " + student. name); System. out. println("age? " + student. age); System. out. println("is. Science. Major? " + student. is. Science. Major); System. out. println("gender? " + student. gender); } } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 28
範例 Java並不會為方法內的區域變數指定預設值 public class Test { public static void main(String[] args) { int x; // x has no default value String y; // y has no default value System. out. println("x is " + x); System. out. println("y is " + y); } } 編譯錯誤:未初始化變數 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 29
基本型態變數與址參型態變數的不同 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 30
拷貝基本型態變數與址參型態變數 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 31
Garbage Collection 如前頁右下角圖所示,執行指定敘述c 1 = c 2之後,c 1會指向c 2所指的相同物件。 之前c 1所指向的物件不再被需要,因而 被稱作垃圾(garbage)。Garbage會占據 記憶體空間,因此,Java的執行系統 (runtime system)會偵測這些garbage,並 自動回收其占據的空間。這個過程被稱 作garbage collection。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 32
Garbage Collection 提示:如果知道某物件不再被需要, 可明確地將null指定給該物件的 址參變數。如果沒有任何址參 變數指向該物件,JVM便會自 動回收其佔據的空間。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 33
Date 類別 – 範例 舉例來說,下列的程式碼: java. util. Date date = new java. util. Date(); System. out. println(date. to. String()); 會印出下列字串: Sun Mar 09 13: 50: 19 EST 2003. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 35
Random類別 我們已使用過Math. random() 取得介於 0. 0與1. 0之間(不包 括 1. 0)的隨機double數�。另一種�生隨機數字的方式是 使用java. util. Random類別 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 36
Random類別 - 範例 如果兩個Random物件帶有相同種子,它們便會�生相同 的數字序列。舉個例子,以下程式碼使用相同種子 3,建 立兩個Random物件。 Random random 1 = new Random(3); System. out. print("From random 1: "); for (int i = 0; i < 10; i++) System. out. print(random 1. next. Int(1000) + " "); Random random 2 = new Random(3); System. out. print("n. From random 2: "); for (int i = 0; i < 10; i++) System. out. print(random 2. next. Int(1000) + " "); From random 1: 734 660 210 581 128 202 549 564 459 961 From random 2: 734 660 210 581 128 202 549 564 459 961 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 37
顯示GUI元件 當開發程式建立圖形使用者介面時,我們會使用 一些Java類別,諸如JFrame、JButton、 JRadio. Button、JCombo. Box及JList等等,來建立 方框、按鈕、radio按鈕、文字清單方塊、範例程 式,等等。下方範例程式利用JFrame類別,建立 兩個視窗: Test. Frame Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. Run 38
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); 宣告、建立與指 定於同一敘述 frame 1 reference : JFrame title: width: height: visible: Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 39
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference 設定 title 的屬性 : JFrame title: "Window 1" width: height: visible: Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 40
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference : JFrame title: "Window 1" width: 200 height: 150 visible: Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 設定 size 的屬性 41
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference : JFrame title: "Window 1" width: 200 設定 visible 的屬性 height: 150 visible: true Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 42
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference : JFrame title: "Window 1" width: 200 height: 150 visible: true frame 2 reference 宣告、建立和指 定於同一敘述 : JFrame title: width: height: visible: Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 43
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference : JFrame title: "Window 1" width: 200 height: 150 visible: true frame 2 reference : JFrame title: "Window 2" width: height: visible: Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 設定 title 的屬性 44
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference : JFrame title: "Window 1" width: 200 height: 150 visible: true frame 2 reference : JFrame title: "Window 2" width: 200 height: 150 visible: Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 設定 size 的屬性 45
animation 追蹤程式碼 JFrame frame 1 = new JFrame(); frame 1. set. Title("Window 1"); frame 1. set. Size(200, 150); frame 1. set. Visible(true); JFrame frame 2 = new JFrame(); frame 2. set. Title("Window 2"); frame 2. set. Size(200, 150); frame 2. set. Visible(true); frame 1 reference : JFrame title: "Window 1" width: 200 height: 150 visible: true frame 2 reference : JFrame title: "Window 2" width: 200 height: 150 visible: true Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 設定 visible 的屬性 46
實例變數及方法 實例變數(instance variable)屬於一個特 定的實例。 實例方法(instance method) 則被類別中的實 例所呼叫。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 48
靜態變數、常數及方法 靜態變數(static variables),又稱作類別變數 (class variables),讓所有的類別實例皆可分享 資料。 靜態方法(static methods)可在沒有建立類別實 例的情況下被呼叫。 靜態常數(static constants)為所有的類別實例皆可分 享的最終變數。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 49
靜態變數、常數及方法 使用static修飾符來宣告靜待變數、常數及方法。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 50
靜態變數、常數及方法 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 51
範例程式 8. 7 Circle. With. Static. Members. java 範例程式 8. 8 Test. Circle. With. Static. Members. java 目標: 演示實例與靜態變數的作用及使用 方法。此範例加入了一個 靜態變數 number. Of. Objects 來追蹤物件Circle 所產生的數據。 Circle. With. Static. Members Test. Circle. With. Static. Members Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 52
private修飾字將存取限制於其定義的類別中,預設修飾字則將 存取限制於package裡,而public修飾字則不對存取做限制。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 54
註釋 物件不可以存取自己的private方法,如下圖(b)所示。然而, 如果這個物件宣告於同一類別中則可行,如下圖(a)所示。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 55
為何資料項目應被封裝? 以保護數據 以減少類別的維護成本 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 56
資料項目封裝 – 範例 Circle. With. Private. Data. Fields Test. Circle. With. Private. Data. Fields Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 57
傳遞物件給方法 F 傳遞基本型態� (數值被傳給基本型態變數) F 傳遞址參 (傳遞的數據為物件的址參) Test. Pass. Object Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. Run 58
傳遞物件給方法 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 59
物件陣列 Circle[] circle. Array = new Circle[10]; 物件陣列實際上即是一個址參變數陣列。 因此,呼叫circle. Array[1]. get. Area() 涉及兩 層的址參,如圖 8. 19所示。circle. Array指向 一整個陣列的位址;而circle. Array[1] 則是 指向一個Circle物件的位址。 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 60
物件陣列 Circle[] circle. Array = new Circle[10]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 61
範例程式 8. 12 Total. Area. java 計算出圓形的面積總和 Total. Area Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. Run 62