Java 入門指南 - 套件

Java 利用套件 (package) 來組織、管理類別 (class) 的 .class 檔案,所謂的套件其實就是類別專屬的資料夾




現在我們把 Encrypt 類別放進 encryptor 資料夾中,也就是 encryptor 套件。假設 Encrypt.java 與 EncryptDemo.java 都在 _code 資料夾中



Encrypt.java 原始程式碼的第一行需要使用關鍵字 (keyword) package
package encryptor;


完整的 Encrypt 類別程式碼請參考 Encrypt.java


藉此標明 Encrypt 在 encryptor 套件中,然後編譯使用
javac -d . Encrypt.java


-d 是指令 javac 的旗標之一,表示依路徑編譯,後面需要接路徑名稱,我們用小數點 . 表示目前的目錄,也就是在 _code 資料夾之中。按下 return (Enter) 鍵,就會出現 encryptor 資料夾



此時, Encrypt.class 就會在 encryptor 資料夾中。


然後,我們的 EncryptDemo 類別調整如下
public class EncryptDemo {
    public static void main(String[] args) {
        System.out.println();
        
        String s[] = {"There is no spoon.",
                      "It is all around us.",
                      "Free your mind.",
                      "Follow the white rabbit.",
                      "Choice. The problem is choice.",
                      "Action, reaction. Cause, effect.",
                      "Everything that has a beginning has an end.",
                      "Because I choose to."};        
        encryptor.Encrypt e = new encryptor.Encrypt();
        String t = "";
        for (int i = 0; i < 8; i++) {
            t = e.toEncode(s[i]);
            System.out.println(t);
            t = e.toDecode(t);
            System.out.println(t);
        }
         
        System.out.println();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:EncryptDemo.java
    功能:示範 Java 程式 
    作者:張凱慶
    時間:西元 2011 年 4 月 */


注意第 13 行
encryptor.Encrypt e = new encryptor.Encrypt();


這時候使用 Encrypt 類別,就得連用套件名稱 encryptor 。


編譯 EncryptDemo.java 的指令不需要額外的旗標
javac EncryptDemo.java


EncryptDemo.class 會出現在目前目錄,也就是 _code 資料夾之中



完整的編譯與執行,如下



為什麼要用套件呢?因為具有相同概念的類別,我們常常會取相同的菜市場名,例如我們設計圖形介面寫了個 Button 類別,但我們寫的 Button 還不夠用,然後找 API 中是否也有可以用的類別,結果發現 API 中也有 Button ,問題來了,我們同時使用自己寫的 Button 與 API 的 Button ,會造成名稱衝突,結果很有可能會是編譯器任挑一個 Button 給程式執行。


這就不是我們想要的執行結果,不是嗎?使用套件最大的好處是可以避免名稱衝突,因為使用套件裡的類別需要用全名,也就是帶有套件名稱用小數點接上類別名稱。我們再看一次 EncryptDemo 的第 13 行
encryptor.Encrypt e = new encryptor.Encrypt();


當然,也可以只用套件裡的類別名稱,這時候就得用另一個關鍵字 import 了!


中英文術語對照
套件package
類別class
關鍵字keyword


您可以繼續參考
軟體開發


相關目錄
回 Java 入門指南
回 Java 教材目錄
回首頁


參考資料
The JavaTM Tutorials: Getting Started
The JavaTM Tutorials: Learning the Java Language
The JavaTM Tutorials: Essential Classes
The Java Language Specification, Third Edition


本文於 2013 年 1 月訂正

沒有留言: