Download presentation
Presentation is loading. Please wait.
1
CH09 套件 物件導向程式設計(II)
2
Java的套件 Java語言的「套件」(Package)是一組相關的類別和介面形成一集合,套件能夠提供存取保護,如同其它程式語言的「函式庫」(Library),稱為Java API(Applications Programming Interface)。 如何建立自己的套件、在Java程式匯入其它套件和存取修飾子protected。
3
Java API的套件(1/2) API是一種軟體的工具箱,Java標準API是一個名為class的大型套件,擁有數個子套件lang、awt和io等,每個子套件擁有許多的類別,如下圖所示:
4
Java API的套件(2/2)
5
JDK的API套件架構(1/4) JDK-API的原始程式碼
6
JDK的API套件架構(2/4) 「套件架構」就是「目錄架構」
7
JDK的API套件架構(3/4) 查看System.java原始檔
8
JDK的API套件架構(4/4) rt.jar內的架構
9
類別與介面檔案的管理-說明 在之前的Java程式範例都是將類別和介面宣告放在同一個程式檔案,如果覺得程式碼太長,可以將每一個類別和介面都獨立成副名為.java的檔案,並且將它放置於同一個資料夾。 套件基本上就是使用目錄。因此,儘管有許多同名的類別檔,只要類別檔是位於不同的目錄,就不會發生衝突。
10
類別與介面檔案的管理-檔案清單
11
類別與介面檔案的管理-範例 每個Java程式檔案的類別都是宣告成public,以便其它類別可以使用,例如:Shape.java的內容,如下所示: /* 程式範例: Shape.java */ public abstract class Shape // Shape類別宣告 { // 成員資料 public double x; // X座標 public double y; // y座標 }
12
package和import指令敘述的使用-建立套件
將類別和介面宣告的檔案建立成套件,我們需要在每一個欲組成套件的Java程式檔案前加上package指令敘述,如下所示: /* 程式範例: Shape.java */ package Ch7_3_3; public abstract class Shape { ……… }
13
package和import指令敘述的使用-匯入套件
在建立好套件後,如果其它Java程式需要使用此套件,就可以使用import指令敘述匯入套件,如下所示: import Ch7_3_3.Circle; import Ch7_3_3.Rectangle; 如果Java程式需要匯入整個Ch7_3_3套件,可以在import指令敘述後使用”*”符號表示所有類別,如下所示: import Ch7_3_3.*;
14
protected存取修飾子的使用-說明
Java語言的存取修飾子protected是指宣告的成員方法或變數可以在同一類別、其子類別或同一套件存取,其存取權限介於public和private之間。
15
protected存取修飾子的使用-範例
例如:在Ch7_3_4套件的Point類別宣告座標的成員變數x和y,其存取修飾子為protected,如下所示: protected double x; protected double y; 此時,在同一個套件繼承Point類別的Line類別可以存取x和y,單純匯入此套件的類別並無法存取x和y。不屬於同一套件,繼承Point類別的子類別ColorPoint,仍然可以存取x和y。
16
Java存取修飾子的使用-存取範圍 Java語言的存取修飾子public、private和protected擁有不同的存取權限範圍,筆者整理如下所示: public:擁有全域範圍,任何類別都可以存取,包含子類別。 private:只可以在同一個類別存取,不可以在子類別存取。 protected:可以在同一個類別、其子類別或同一套件中存取。 沒有使用修飾子:預設範圍是同一個類別和套件中存取,但不包含不同套件的子類別,protected包含不同套件的子類別,所以其存取範圍比protected小。
17
引用JDK套件 引入單一類別的語法: import 套件.子套件. … .類別; 引入單一介面的語法:
引入套件內所有類別的語法: import 套件.子套件. … .*;
18
引用JDK套件 引入某套件的所有類別及介面時,並不包含下一層的類別或介面。 import java.awt.*;
並不包含下式引入的任何類別或介面。 import java.awt.event.*;
19
引用JDK套件 JDK常用套件的簡單說明 package 說明 java.lang 一般常用的功能,此套件會自動被編譯器引入程式裡。
java.io 程式的輸入和輸出資料功能。 java.applet 含建立applet相關的類別及介面。 java.util 含工具類別及介面,如日期、時間、亂數相關類別等。 java.awt 抽象視窗工具套組,包含繪圖、視窗程式元件等。 java.beans 建立可重用軟體元件之類別及介面。 java.net 網路通訊類別。 javax.swing 新一代的圖形化使用者介面(GUI)元件。
20
classpath設定套件所在位置 使用–classpath參數指出引入之類別檔的位置 執行程式時
javac –classpath <路徑一>;<路徑二>;… 程式.java 執行程式時 java –classpath <路徑一>;<路徑二>;… 程式
21
classpath設定套件所在位置
22
classpath設定套件所在位置 解壓縮my.jar至套件目錄
23
自訂套件 自訂套件語法: package 套件.子套件.…; // 引入類別或介面 // 類別或介面定義
套件在命名時,第一層名稱為組織的類型,如:公司為com,非營利性組織為org等。第二層名稱為組織名稱,第三層以下則是依據功能分類。 com.riarock.tools
24
都是為了「程式碼的再利用」 定義方法時,方法內的變數不可以重複宣告,表示方法內為一個名稱空間(Name Space)。
定義類別時,方法被類別所包裹,類別內的屬性或方法不可以重複宣告,表示類別內為另一個名稱空間。 套件可以區隔同名的類別,又是另一個名稱空間。 三層的名稱空間可以讓「程式碼的再利用」發揮到最佳的情況,也有益於程式碼的管理。
25
靜態引入(Static Import) 靜態引入可以引入類別的靜態成員 靜態引入發生同名衝突時,類別本身定義的方法或屬性優先取用。
import static 套件.子套件. … .類別.靜態屬性; import static 套件.子套件. … .類別.靜態方法; import static 套件.子套件. … .類別.*; 靜態引入發生同名衝突時,類別本身定義的方法或屬性優先取用。 區域變數也會遮蔽靜態引入的靜態屬性。
Similar presentations