210 likes | 321 Views
第八章 套件的使用. 鄧姚文 http://www.ywdeng.idv.tw. 大綱. 8-1 Java 的 .class 檔案 8-2 套件 (Package) 的編譯與執行 8-3 引用套件下的類別 8-4 使用 jar 檔. 8-1 Java 的 .class 檔案. Java 的原始程式碼 (.java 檔 ) 在經過編譯後會產生「 .class 」檔案。而「 .class 」檔案數目會依據原始檔中定義的類別數目而定。 如果 Java 的原始檔中所有類別的型態都是預設型態,可以用任何一個類別的名稱當作檔案的名稱。
E N D
第八章套件的使用 鄧姚文 http://www.ywdeng.idv.tw
大綱 • 8-1Java的.class檔案 • 8-2 套件 (Package) 的編譯與執行 • 8-3 引用套件下的類別 • 8-4 使用jar檔
8-1 Java的.class檔案 • Java的原始程式碼 (.java檔) 在經過編譯後會產生「.class」檔案。而「.class」檔案數目會依據原始檔中定義的類別數目而定。 • 如果Java的原始檔中所有類別的型態都是預設型態,可以用任何一個類別的名稱當作檔案的名稱。 • 每一個Java原始檔中只能有一個「public」的類別,而且該Java程式檔案的檔名必需和「public」類別的名稱相同 • class Dog{ } • class Fish{ } • class Cat{ }
8-2 套件 (Package) 的編譯與執行 • 分門別類地管理類別 • 定義套件 • 套件的定義敘述句必需置放於程式中非註解的第一行。 • 程式中不可以有一行以上的「package」敘述句。 package packagename;
8-2 套件 (Package) 的編譯與執行… • package的名稱可以是一組有意義的文字,也可以是一連串以句號 ( . ) 組合而成的文字 • 套件名稱中的句號 ( . ) 相當於Windows作業系統下的表示路徑的分隔符號 ( \ ) • 原始檔在編譯後,會在原始檔所在的目錄下產生「stock」資料夾,並在「stock」資料夾下再產生「sale」子資料夾,而編譯後的「Customer.class」檔案就放在「sale」資料夾中。 package stock.sale; public class Customer {}
8-2 套件 (Package) 的編譯與執行… • Java程式中的每一個類別檔都一定是屬於某一個套件,位於同一個套件下的類別檔可以互相的引用。 • 沒有定義package敘述句的Java檔案,編譯所產生的類別檔放置在「預設套件 (default package)」中,也就是Java原始檔案所在的同一個目錄 (現行目錄) 下。
8-2 套件 (Package) 的編譯與執行… • 在現行目錄下直接編譯具有package敘述句的Java程式,必須在「javac」指令後方再加上「-d」參數,參數後方再加上目錄名稱,最後再加上需要編譯的程式名稱: • 可以一次編譯兩個以上的Java原始檔: javac –d . myPackage.java javac –d . myPackage.java myPackage.java
8-2 套件 (Package) 的編譯與執行… • 如果不特別指定「-d」參數來編譯具有「package mypackage;」敘述的java原始檔。以範例中的「mypackage.java」為例,依照以下的方式完成開發及編譯的流程: 一、在現行目錄下建立mypackage資料夾。 二、在現行目錄下使用編輯軟體撰寫程式。 三、將程式檔儲存在現行目錄下的mypackage資料夾中,並命名為「mypackage.java」。 四、在現行目錄下,使用「javac」指令,並指明程式檔的儲存相對路徑及檔名,來編譯程式。指令如下:「javac .\mypackage\mypackage.java」。
8-2-1 執行套件 • 必須指明套件的名稱及類別檔的名稱,package和package之間,package和class名稱之間必須以「.」作區隔 C:\Work\Chap8>java mypackage.PackageTest
8-2-2 使用classpath參數執行套件 • 以「classpath」指明需要的檔案。 • 例: • 檔案名稱為「PackageTest.class」 • 檔案位於 C:\Work\Chap8 • 套件為 mypackage java -classpath .;c:\Work\Chap8\ mypackage.PackageTest
8-2-3 使用classpath參數執行套件… • 設定 CLASSPATH 環境變數: set CLASSPATH=%CLASSPATH%;C:\Work\Chap8\ java myackage.PackageTest
8-3 引用套件下的類別 • 利用「import」敘述將相關的套件引入: • 在程式中重覆使用「import」敘述,引入多個套件。 • 使用「*」代表要引入套件下的所有類別。 • 預設的 import • import java.lang.* import java.awt.color; import java.awt.*;
8-3-1 使用import static敘述-J2SE 5.0 • 新的import敘述將類別中的static方法引入,使用該方法時不需要再加上類別的名稱 import static 套件名稱.類別名稱.方法名稱; import static java.lang.System.out; out.println();
8-3-2 使用存取修飾子 • 使用不同的存取修飾子可以限制類別或成員的存取模式:
8-3-3 Import static的問題 • 遮蔽問題 • import static 引入的屬性值會被類別或方法中相同名稱的屬性遮蔽。 • 方法的衝突問題 • import static 同時引入的類別中具有相同名稱的方法時,編譯錯誤!
8-4 使用jar檔 • 「jar」是Java Archive的簡稱,可以當作類別的集合。 • Jar 為 ZIP 格式,可以將某個 package下的所有類別檔與子目錄打包成一個 jar 檔 • jar 指令格式: jar [參數] 目的檔名 要加入的檔案或路徑
8-4 使用jar檔 … • 更新JAR檔案的內容:使用u參數 • 顯示JAR檔案的內容:使用tf參數 • 取出JAR檔案的內容:使用xf參數 jar -uvf test.jar myPackage\Update.class jar uvf test.jar myPackage jar xf test.jar
使用JAR檔案中的類別 • 直接將JAR放在「JAVA_HOME」路徑中 • 編譯引入套件的 Java 檔案時,使用「classpath」參數指明 JAR 檔的位置。 • 直接設定 CLASSPATH javac –classpath C:\Work\Chap8\display.jar UseJar.java
練習 • 在一個 Java 原碼檔之中撰寫下列類別,套件名稱為 tw.edu.knu.im • 一個代表『點』的類別,Point,提供 x 座標與 y 座標兩個屬性 • 一個代表『線』的類別,Line,一條直線由兩點構成,提供『起點』、『終點』、『長度』等屬性 • 編譯後觀察專案目錄內的子目錄結構
練習 • 將前一個練習的類別檔案包成一個 JAR 檔 • 寫一個測試程式,建立一條直線,印出其起點、終點座標,以及長度 • 問題:如何在專案內引入另一個專案產生的 JAR 檔?