Sun Educational Service 第九單元 實作封裝與建構式. Sun Educational Service Module 9, slide 2 of 43 單元概論 單元目標: – 利用封裝 (encapsulation) 來保護資料 – 設計建構式來初始化物件 問題與討論.

Slides:



Advertisements
Similar presentations
1 生物計算期末作業 暨南大學資訊工程系 2003/05/13. 2 compare f1 f2  只比較兩個檔案 f1 與 f2 ,比完後將結果輸出。 compare directory  以兩兩比對的方式,比對一個目錄下所有檔案的相 似程度。  將相似度很高的檔案做成報表輸出,報表中至少要.
Advertisements

布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
Introduction to Java Programming Lecture 13 Classes I OO Programming.
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
Introduction to Constructor, Overloading, and Accessibility CS340100, NTHU Yoshi.
BY OX. 檢視表與資料表的差異性 查詢 (query) 檢視表 (View) 的紀錄,是經由查詢 (query) 而來,而檢 視表的資料來源可以是單一資料表或是多資料表,甚 至其他檢視表 但檢視表中的紀錄只存在資料表中.
What is static?. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1; this.instanceX =
: Boxes ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11003: Boxes 解題者:蔡欣燁 解題日期: 2007 年 3 月 19 日.
Review of Chapter 3 - 已學過的 rules( 回顧 )- 朝陽科技大學 資訊管理系 李麗華 教授.
建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。
:New Land ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11871: New Land 解題者:施博修 解題日期: 2011 年 6 月 8 日 題意:國王有一個懶兒子,為了勞動兒子,他想了一個 辦法,令他在某天早上開始走路,直到太陽下山前,靠.
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
JAVA 程式設計與資料結構 第二章 JAVA 程式基本概念及操作. 第一個程式 /* * 這是第一個程式 (FirstP.java) */ class FirstP{ public static void main(String args[]){ System.out.println("Whatever.
: Problem E - Beverages ★★★☆☆ 題組: Contest Archive with Online Judge 題號: 11060: Problem E - Beverages 解題者:李重儀 解題日期: 2008 年 3 月 4 日 題意: Dilbert 大學剛畢業,他決定要和朋友出去。他有奇怪的嗜好,
1.1 電腦的特性 電腦能夠快速處理資料:電腦可在一秒內處理數百萬個 基本運算,這是人腦所不能做到的。原本人腦一天的工 作量,交給電腦可能僅需幾分鐘的時間就處理完畢。 電腦能夠快速處理資料:電腦可在一秒內處理數百萬個 基本運算,這是人腦所不能做到的。原本人腦一天的工 作量,交給電腦可能僅需幾分鐘的時間就處理完畢。
第 13 章 常數、靜態成員與朋友關 係 13-1 常數物件與成員 13-1 常數物件與成員 13-2 物件成員與巢狀類別 13-2 物件成員與巢狀類別 13-3 靜態成員資料與函數 13-3 靜態成員資料與函數 13-4 朋友關係 13-4 朋友關係.
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
STAT0_corr1 二變數的相關性  變數之間的關係是統計研究上的一大目標  討論二分類變數的相關性,以列聯表來表示  討論二連續隨機變數時,可以作 x-y 散佈圖觀察它 們的關係強度  以相關係數來代表二者關係的強度.
Chapter 07 低階程式語言.
Department of Air-conditioning and Refrigeration Engineering/ National Taipei University of Technology 模糊控制設計使用 MATLAB 李達生.
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
南投縣社區大學 Excel 實務應用入門 講師 : 林泉成
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件 9-5 表單的鍵盤事件 9-5 表單的鍵盤事件 9-6 控制項的事件 9-6 控制項的事件.
Chapter 13 塑模靜態觀點:物件圖 Static View : Object Diagram.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
: The largest Clique ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11324: The largest Clique 解題者:李重儀 解題日期: 2008 年 11 月 24 日 題意: 簡單來說,給你一個 directed.
第三部分:研究設計 ( 二): 研究工具的信效度 與研究效度 (第九章之第 306 頁 -308 頁;第四章)
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
Chapter 20 塑模動態觀點:狀態圖 Statechart Diagram. 學習目標  說明狀態圖的目的  定義狀態圖的基本記號  展示狀態圖的建構  定義活動、內部事件及遞延事件的狀態 圖記號.
Hung-Hsiang WuWindows Processing Design1 Chapter 3 基本觀念 變數宣告與型態 特殊運算子符號 字串與數值的轉換 類別與物件的觀念 建立新的專案 WinMain 程式進入點 Include Header File.
類別函式庫. Java Bean 一個單獨的 AWT 元件都是一個 bean. Java Bean 也有一個 bean 的 class 可繼承, 但是並不強 迫一定要繼承. Bean 的結構 Properties 屬性 : 描述 bean 的屬性 如顏色, 大小,label 等. 透過一對 methods.
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 參 資料蒐集的方法.
行政院國家科學委員會工程技術發展處自動化學門 * 試以國立成功大學製造工程研究所 鄭芳田教授 產學合作計畫 : 智慧預測保養系統之設計與實作 成果報告盤點為範例 國科會工程處專題計畫成果典藏 自動化學門成果報告盤點範例.
第三章 自動再裝載運用篇 使用時機:裝載計劃完成時,尚有剩餘空 間的情形,維持已固定計劃而繼續做裝載 最佳化。以支持次日裝載計劃而提前調整 作業模式。 裝載物品設定和裝載容器設定如前兩章介 紹,於此不再重複此動作,直接從裝載計 劃設定開始,直接從系統內定的物品和容 器選取所需.
: Ahoy, Pirates! ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11402: Ahoy, Pirates! 解題者:李重儀 解題日期: 2008 年 8 月 26 日 題意:有一個海盜島有 N 個海盜,他們的編號 (id)
In Chapter 1 您將學到什麼 ? 了解 Java 語言的特徵 Java 程式的發展過程關係 Java 程式的基本架構.
1-6 動畫的文件屬性 舞台是動畫實際播放的畫面, 所以舞台的大 小與長寬比例對將來動畫的呈現有很大的 影響。 Flash 預設的舞台尺寸是 550 Pixels × 400 Pixels, 背景為白色, 如果要更改舞台大小與 背景色, 請執行『修改 / 文件』命令, 開啟文 件屬性 (Document.
資料結構實習-一 參數傳遞.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
計算機概論 演算法與程式語言 李明山.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
© The McGraw-Hill Companies, Inc., 2006© The McGraw-Hill Companies, Inc., 2007 Chapter 4 IP 定址:分級式定址.
第12章 多重表單與模組的應用程式 12-1 VB.NET的方案與專案 12-2 模組化VB.NET應用程式 12-3 多重表單的應用程式
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
2 期末程式第一份報告 報告內容 撰寫此程式的動機和目的以及預期達到的功能和結果 流程圖 繼承關係 資料結構 檔案上傳格式 第 n 組程式流程圖.doc 組別於近日內公告 5/31, 17:00 前交.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
1 第二十章 大型程式的發展 使用名稱空間 熟悉大型程式的開發方式 條件式編譯指令的撰寫. 2 名稱空間 名稱空間就像是一個管理介面,可以將定義的識別 字放在名稱空間之下,而不會有相互衝突的發生 名稱空間的語法如下 把變數 var 放在名稱空間 name1 內 要存取使用名稱空 間 name1 的變數.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
INTRODUCTION TO MATLAB SHAWNNTOU. What Is MATLAB? MATLAB® is a high-performance language for technical computing. MATLAB® is a high-performance language.
: Problem E Antimatter Ray Clearcutting ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11008: Problem E Antimatter Ray Clearcutting 解題者:林王智瑞.
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
IBM Rational PureCoverage 實踐大學 資訊管理學系 2007 年 1 月.
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/30 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH7.1~CH /12/26.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 壹 企業研究導論.
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
What is static? CS340100, NTHU Yoshi. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1;
Microsoft Excel.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Presentation transcript:

Sun Educational Service 第九單元 實作封裝與建構式

Sun Educational Service Module 9, slide 2 of 43 單元概論 單元目標: – 利用封裝 (encapsulation) 來保護資料 – 設計建構式來初始化物件 問題與討論

Sun Educational Service Module 9, slide 3 of 43 使用封裝

Sun Educational Service Module 9, slide 4 of 43 public 修飾子 public int currentFloor=1; public void setFloor(int desiredFloor) {... }

Sun Educational Service Module 9, slide 5 of 43 public 修飾子 範例: 1public class PublicElevator { 2 3 public boolean doorOpen=false; 4 public int currentFloor = 1; 5 6 public final int TOP_FLOOR = 5; 7 public final int BOTTOM_FLOOR = 1; 8}

Sun Educational Service Module 9, slide 6 of 43 public 修飾子 範例: 1public class PublicElevatorTest { 2 3 public static void main(String args[]) { 4 5 PublicElevator pubElevator = new PublicElevator(); 6 7 pubElevator.doorOpen = true; // 乘客進入 8 pubElevator.doorOpen = false; // 關門 9 // 到 0 樓 ( 在大樓底層的下方 ) 10 pubElevator.currentFloor--; 11 pubElevator.currentFloor++; // 到 7 樓 ( 大樓只有 5 層樓 ) 14 pubElevator.currentFloor = 7; 15 pubElevator.doorOpen = true; // 乘客進出 16 pubElevator.doorOpen = false; 17 pubElevator.currentFloor = 1; // 到 1 樓

Sun Educational Service Module 9, slide 7 of pubElevator.doorOpen = true; // 乘客進出 19 pubElevator.currentFloor++; // 電梯移動時,門是開啟的 20 pubElevator.doorOpen = false; 21 pubElevator.currentFloor--; 22 pubElevator.currentFloor--; 23 } 24 } 25

Sun Educational Service Module 9, slide 8 of 43 private 修飾子 private int currentFloor=1; private void calculateCapacity() {... }

Sun Educational Service Module 9, slide 9 of 43 private 修飾子 範例: 1public class PrivateElevator1 { 2 3 private boolean doorOpen=false; 4 private int currentFloor = 1; 5 6 private final int TOP_FLOOR = 5; 7 private final int BOTTOM_FLOOR = 1; 8}

Sun Educational Service Module 9, slide 10 of 43 private 修飾子 範例: 1public class PrivateElevator1Test { 2 3 public static void main(String args[]) { 4 5 PrivateElevator1 privElevator = new PrivateElevator1(); 6 7 /************************************************** 8 * The following lines of code will not compile * 9 * because they attempt to access private * 10 * variables. * 11 **************************************************/ privElevator.doorOpen = true; // 乘客進入 14 privElevator.doorOpen = false; // 關門 15 // 到 0 樓 ( 在大樓底層的下方 ) 16 privElevator.currentFloor--; 17 privElevator.currentFloor++;

Sun Educational Service Module 9, slide 11 of // 到 7 樓 ( 大樓只有 5 層樓 ) 20 privElevator.currentFloor = 7; 21 privElevator.doorOpen = true; // 乘客進出 22 privElevator.doorOpen = false; 23 privElevator.currentFloor = 1; // 到 1 樓 24 privElevator.doorOpen = true; // 乘客進出 25 privElevator.currentFloor++; // 電梯移動時,門是開啟的 26 privElevator.doorOpen = false; 27 privElevator.currentFloor--; 28 privElevator.currentFloor--; 29 } 30 }

Sun Educational Service Module 9, slide 12 of 43 介面 vs. 實作

Sun Educational Service Module 9, slide 13 of 43 介面 vs. 實作 範例: 1public class PrivateShirt1 { 2 3 private int shirtID = 0; // 襯衫的預設 ID 4 private String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R= 紅色, B= 藍色, G= 綠色, U= 未設定 7 private char colorCode = ‘U’; 8 private double price = 0.0; // 所有襯衫的預設價格 9 private int quantityInStock = 0; // 所有襯衫的預設數量 public char getColorCode() { 12 return colorCode; 13 } public void setColorCode(char newCode) { 16 colorCode = newCode; 17 }

Sun Educational Service Module 9, slide 14 of // 其他對 shirtID 、 description 、 price 、和 quantityInStock 20 // 的取得和設定方法,仿照上述的做法 } // 類別結尾

Sun Educational Service Module 9, slide 15 of 43 介面 vs. 實作 範例: 1public class PrivateShirt1Test { 2 3 public static void main (String args[]) { 4 5 PrivateShirt1 privShirt = new PrivateShirt1(); 6 char colorCode; 7 8 // 設定合法的 colorCode 9 privShirt.setColorCode(‘R’); 10 colorCode = privShirt.getColorCode(); // PrivateShirtTest1 類別能夠設定合法的 colorCode 13 System.out.println(“Color Code: “ + colorCode); // 設定不合法的 colorCode 16 privShirt.setColorCode(‘Z’); 17 colorCode = privShirt.getColorCode();

Sun Educational Service Module 9, slide 16 of // PrivateShirtTest1 類別能夠設定不合法的 colorCode 20 System.out.println(“Color Code: “ + colorCode); 21 } 22 }

Sun Educational Service Module 9, slide 17 of 43 介面 vs. 實作 範例: 1public class PrivateShirt2 { 2 3 private int shirtID = 0; // 襯衫的預設 ID 4 private String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R= 紅色, B= 藍色, G= 綠色, U= 未設定 7 private char colorCode = ‘U’; 8 private double price = 0.0; // 所有襯衫的預設價格 9 private int quantityInStock = 0; // 所有襯衫的預設數量 public char getColorCode() { 12 return colorCode; 13 } public void setColorCode(char newCode) { switch (newCode) {

Sun Educational Service Module 9, slide 18 of case ‘R’: 19 case ‘G’: 20 case ‘B’: 21 colorCode = newCode; 22 break; 23 default: 24 System.out.println(“Invalid colorCode. Use R, G, or B”); 25 } 26 } // 其他對 shirtID 、 description 、 price 、和 quantityInStock 29 // 的取得和設定方法,仿照上述的做法 } // 類別結尾

Sun Educational Service Module 9, slide 19 of 43 介面 vs. 實作 範例: 1public class PrivateShirt2Test { 2 3 public static void main (String args[]) { 4 5 PrivateShirt2 privShirt = new PrivateShirt2(); 6 char colorCode; 7 8 // 設定合法的 colorCode 9 privShirt.setColorCode(‘R’); 10 colorCode = privShirt.getColorCode(); // PrivateShirtTest1 類別能夠設定合法的 colorCode 13 System.out.println(“Color Code: “ + colorCode); // 設定不合法的 colorCode 16 privShirt.setColorCode(‘Z’); 17 colorCode = privShirt.getColorCode();

Sun Educational Service Module 9, slide 20 of // PrivateShirtTest2 類別無法設定不合法的 colorCode. 20 // colorCode 仍然是 R 21 System.out.println(“Color Code: “ + colorCode); 22 } 23 }

Sun Educational Service Module 9, slide 21 of 43 一個封裝過的電梯 範例: 1public class PrivateElevator2 { 2 3 private boolean doorOpen=false; 4 private int currentFloor = 1; 5 private int weight = 0; 6 7 final int CAPACITY = 1000; 8 final int TOP_FLOOR = 5; 9 final int BOTTOM_FLOOR = 1; public void openDoor() { 12 doorOpen = true; 13 } public void closeDoor() { 16 calculateCapacity(); 17

Sun Educational Service Module 9, slide 22 of if (weight <= CAPACITY) { 19 doorOpen = false; 20 } 21 else { 22 System.out.println(“The elevator has exceeded capacity.”); 23 System.out.println(“Doorswillremainopenuntilsomeoneexits!”); 24 } 25 } // 事實上,電梯會有重量感測器來檢查電梯中實際的重量, 28 // 但為了將問題簡化,我們只取一個隨機的數目來表示電梯 29 // 中的重量 30 // private void calculateCapacity() { 33 weight = (int) (Math.random() * 1500); 34 System.out.println(“The weight is “ + weight); 35 } public void goUp() { 38 if (!doorOpen) { 39 if (currentFloor < TOP_FLOOR) {

Sun Educational Service Module 9, slide 23 of currentFloor++; 41 System.out.println(currentFloor); 42 } 43 else { 44 System.out.println(“Already on top floor.”); 45 } 46 } 47 else { 48 System.out.println(“Doors still open!”); 49 } 50 } public void goDown() { 53 if (!doorOpen) { 54 if (currentFloor > BOTTOM_FLOOR) { 55 currentFloor--; 56 System.out.println(currentFloor); 57 } 58 else { 59 System.out.println(“Already on bottom floor.”); 60 } 61 }

Sun Educational Service Module 9, slide 24 of else { 63 System.out.println(“Doors still open!”); 64 } 65 } public void setFloor(int desiredFloor) { 68 if ((desiredFloor>=BOTTOM_FLOOR)&&(desiredFloor<=TOP_FLOOR)){ while (currentFloor != desiredFloor) { 71 if (currentFloor < desiredFloor) { 72 goUp(); 73 } else { 76 goDown(); 77 } 78 } 79 } 80 else { 81 System.out.println(“Invalid Floor”); 82 } 83 }

Sun Educational Service Module 9, slide 25 of public int getFloor() { 86 return currentFloor; 87 } public boolean getDoorStatus() { 90 return doorOpen; 91 } 92 } 93

Sun Educational Service Module 9, slide 26 of 43 一個封裝過的電梯 範例: 1public class PrivateElevator2Test { 2 3 public static void main(String args[]) { 4 5 PrivateElevator2 privElevator = new PrivateElevator2(); 6 7 privElevator.openDoor(); 8 privElevator.closeDoor(); 9 privElevator.goDown(); 10 privElevator.goUp(); 11 privElevator.goUp(); 12 privElevator.openDoor(); 13 privElevator.closeDoor(); 14 privElevator.goDown(); 15 privElevator.openDoor(); 16 privElevator.goDown(); 17 privElevator.closeDoor();

Sun Educational Service Module 9, slide 27 of privElevator.goDown(); 19 privElevator.goDown(); int curFloor = privElevator.getFloor(); if (curFloor != 5 && ! privElevator.getDoorStatus()) { 24 privElevator.setFloor(5); 25 } privElevator.setFloor(10); 28 privElevator.openDoor(); 29 } 30 }

Sun Educational Service Module 9, slide 28 of 43 範例輸出結果 The weight is 453 Already on bottom floor. 2 3 The weight is Doors still open! The weight is Already on bottom floor

Sun Educational Service Module 9, slide 29 of 43 練習一:撰寫封裝類別 目標 步驟 討論

Sun Educational Service Module 9, slide 30 of 43 變數有效範圍 (Variable Scope) 範例: 1public class Person2 { 2 3 // 變數 age 有效範圍的開始 4 private int age = 34; 5 6 public void displayName() { 7 8 // 字串 name 有效範圍的開始 9 String name = “Peter Simmons”; 10 System.out.println(“My name is “ + name + “ and I am “ + age ); } // 字串 name 有效範圍的結尾 public String getName () { return name; // 這造成錯誤 17 }

Sun Educational Service Module 9, slide 31 of } // 變數 age 有效範圍結尾

Sun Educational Service Module 9, slide 32 of 43 記憶體中的實體變數及區域變數

Sun Educational Service Module 9, slide 33 of 43 建立建構式 語法: modifiers class ClassName { ConstructorName([arguments]) { code_block; } 範例: 1public class ConstructorShirt1 { 2 3 private int shirtID = 0; // 襯衫的預設 ID 4 private String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R= 紅色, B= 藍色, G= 綠色, U= 未設定 7 private char colorCode = ‘U’; 8 private double price = 0.0; // 所有襯衫的預設價格 9 private int quantityInStock = 0; // 所有襯衫的預設數量

Sun Educational Service Module 9, slide 34 of public ConstructorShirt1(char startingCode) { switch (startingCode) { 14 case ‘R’: 15 case ‘G’: 16 case ‘B’: 17 colorCode = startingCode; 18 break; 19 default: 20 System.out.println(“Invalid colorCode. Use R, G, or B”); 21 } 22 } public char getColorCode() { 25 return colorCode; 26 } 27 } // 類別結尾 28 29

Sun Educational Service Module 9, slide 35 of 43 建立建構式 範例: 1public class ConstructorShirt1Test { 2 3 public static void main (String args[]) { 4 5 ConstructorShirt1 constShirt = new ConstructorShirt1(‘R’); 6 char colorCode; 7 8 colorCode = constShirt.getColorCode(); 9 10 System.out.println(“Color Code: “ + colorCode); 11 } 12 }

Sun Educational Service Module 9, slide 36 of 43 預設建構式 範例: ConstructorShirt constShirt = new ConstructorShirt(); 範例: 1public class DefaultShirt { 2 3 private int shirtID = 0; // 襯衫的預設 ID 4 private String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R= 紅色, B= 藍色, G= 綠色, U= 未設定 7 private char colorCode = ‘U’; 8 private double price = 0.0; // 所有襯衫的預設價格 9 private int quantityInStock = 0; // 所有襯衫的預設數量 public DefaultShirt() { 12 colorCode = ‘R’; 13 } 14

Sun Educational Service Module 9, slide 37 of public char getColorCode() { 16 return colorCode; 17 } 18 } // 類別結尾 19

Sun Educational Service Module 9, slide 38 of 43 覆載建構式 範例: 1public class ConstructorShirt2 { 2 3 private int shirtID = 0; // 襯衫的預設 ID 4 private String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R= 紅色, B= 藍色, G= 綠色, U= 未設定 7 private char colorCode = ‘U’; 8 private double price = 0.0; // 所有襯衫的預設價格 9 private int quantityInStock = 0; // 所有襯衫的預設數量 public ConstructorShirt2() { 12 colorCode = ‘R’; 13 } public ConstructorShirt2 (char startingCode) { switch (startingCode) {

Sun Educational Service Module 9, slide 39 of case ‘R’: 19 case ‘G’: 20 case ‘B’: 21 colorCode = startingCode; 22 break; 23 default: 24 System.out.println(“Invalid colorCode. Use R, G, or B”); 25 } 26 } public ConstructorShirt2 (char startingCode, int startingQuantity) { switch (startingCode) { 31 case ‘R’: 32 colorCode = startingCode; 33 break; 34 case ‘G’: 35 colorCode = startingCode; 36 break; 37 case ‘B’: 38 colorCode = startingCode; 39 break;

Sun Educational Service Module 9, slide 40 of default: 41 System.out.println(“Invalid colorCode. Use R, G, or B”); 42 } if (startingQuantity > 0 || startingQuantity < 2000) { 45 quantityInStock = startingQuantity; 46 } else { 49 System.out.println(“Invalid quantity. Must be > 0 or < 2000”); 50 } 51 } public char getColorCode() { 54 return colorCode; 55 } public int getQuantityInStock() { 59 return quantityInStock; 60 } } // 類別結尾 63

Sun Educational Service Module 9, slide 41 of 43 覆載建構式 範例: 1public class ConstructorShirt2Test { 2 3 public static void main (String args[]) { 4 5 ConstructorShirt2 constShirtFirst = new ConstructorShirt2(); 6 ConstructorShirt2 constShirtSecond = new ConstructorShirt2(‘G’); 7 ConstructorShirt2 constShirtThird = new ConstructorShirt2(‘B’, 1000); 8 9 char colorCode; 10 int quantity; colorCode = constShirtFirst.getColorCode(); 13 System.out.println(“Object 1 Color Code: “ + colorCode); colorCode = constShirtSecond.getColorCode(); 16 System.out.println(“Object 2 Color Code: “ + colorCode);

Sun Educational Service Module 9, slide 42 of colorCode = constShirtThird.getColorCode(); 19 quantity = constShirtThird.getQuantityInStock(); 20 System.out.println(“Object 3 Color Code: “ + colorCode); 21 System.out.println(“Object 3 Quantity on Hand: “ + quantity); 22 } 23 }

Sun Educational Service Module 9, slide 43 of 43 練習二:使用建構式 目標 步驟 討論