
套件 (package) 是用來組織類別 (class) 檔案的資料夾名稱

這需要用到關鍵字 (keyword) package 宣告套件識別字 (identifier) ,我們將上個單元的 ClassDemo05 改成 ClassDemo06 ,然後宣告放在套件 classdemo 中
| 001 | package classdemo; // 宣告套件 |
| 002 | |
| 003 | public class ClassDemo06 { |
| 004 | private int a; |
| 005 | |
| 006 | public ClassDemo06(int a) { |
| 007 | setA(a); |
| 008 | } |
| 009 | |
| 010 | public void setA(int a) { |
| 011 | this.a = a; |
| 012 | } |
| 013 | |
| 014 | public int getA() { |
| 015 | return a; |
| 016 | } |
| 017 | |
| 018 | public int doSomething(int a) { |
| 019 | return this.a + a; |
| 020 | } |
| 021 | |
| 022 | public static void main(String[] args) { |
| 023 | ClassDemo06 d = new ClassDemo06(13); |
| 024 | |
| 025 | System.out.println(); |
| 026 | System.out.println(d.getA()); |
| 027 | System.out.println(d.doSomething(9)); |
| 028 | System.out.println(); |
| 029 | } |
| 030 | } |
| 031 | |
| 032 | /* 檔名: ClassDemo06.java |
| 033 | 作者: Kaiching Chang |
| 034 | 時間: September, 2014 */ |
package 通常放在程式碼的第 1 行
| 001 | package classdemo; // 宣告套件 |
編譯時要加上 -d 及路徑的旗標,我們路徑用小數點 . ,表示當前目錄

編譯完成就會產生新的資料夾 classdemo ,而 ClassDemo06.class 就放在這裡

執行時要加上資料夾的路徑

簡單說套件就是路徑名稱,這可以是多層的,例如 demo.classdemo 就在 demo 資料夾中的 classdemo 資料夾。
至於在其他程式中使用套件裡編譯好的 .class 檔案,就要用到關鍵字 import 了,例如我們在下面的 ClassDemo07.java 引入套件 classdemo 的 ClassDemo06
| 001 | // 引入套件中的類別名稱 |
| 002 | import classdemo.ClassDemo06; |
| 003 | |
| 004 | public class ClassDemo07 { |
| 005 | public static void main(String[] args) { |
| 006 | // 建立套件裡的類別建立物件 |
| 007 | ClassDemo06 d = new ClassDemo06(11); |
| 008 | |
| 009 | System.out.println(); |
| 010 | System.out.println(d.getA()); |
| 011 | System.out.println(d.doSomething(8)); |
| 012 | System.out.println(); |
| 013 | } |
| 014 | } |
| 015 | |
| 016 | /* 檔名: ClassDemo07.java |
| 017 | 作者: Kaiching Chang |
| 018 | 時間: September, 2014 */ |
import 也會放在程式檔案的一開始,這是因為 import 用來引入識別字名稱,引入後才可以使用所引入的識別字
| 001 | // 引入套件中的類別名稱 |
| 002 | import classdemo.ClassDemo06; |
留意這裡是引入 classdemo.ClassDemo06 ,這讓我們在下面可以直接使用 ClassDemo06 的名稱
| 006 | // 建立套件裡的類別建立物件 |
| 007 | ClassDemo06 d = new ClassDemo06(11); |
當然我們也可以只引入 classdemo 的套件名稱,不過這樣使用 ClassDemo06 就要連套件名稱一起用,也就是要用 classdemo.ClassDemo06 宣告 ClassDemo06 型態 (type) 的物件 (object) 。
編譯執行,結果如下

接下來我們在進入軟體開發之前,把焦點放回 static 這個關鍵字上。
中英文術語對照
| 套件 | package |
| 類別 | class |
| 關鍵字 | keyword |
| 識別字 | identifier |
| 型態 | type |
| 物件 | object |
重點整理
- 宣告套件使用關鍵字 package ,編譯時加上參數 -d ,完成編譯後該套件的類別會放到套件名稱的資料夾中。
- 單獨執行套件中的類別檔案,要在執行指令加上路徑。
- 若要在其他類別中使用套件中編譯好的 .class 檔案,就要用關鍵字 import 引入到目前檔案中。
問題與討論
- 為什麼要用套件來組織類別檔案?
- 如果套件中編譯好的類別很多,能不能 import 一次就好了呢?
the end
沒有留言:
張貼留言