1 / 18

Packages : Organizing Related Classes into Packages

Packages : Organizing Related Classes into Packages. 為了促使程式碼重用 (code reuse), 並有助於組成 classes, Java 提供一個強而有力的工具,將相關的 class 和 interface 收集在一個 directory (目錄) 內,稱之為 packages . 要建立一個 package (即,加 class 到某一個 package),只要在你 的 source code file 的第一行(任何 class 宣告之前)使用以下的 statement :

garima
Download Presentation

Packages : Organizing Related Classes into Packages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Packages : Organizing Related Classes into Packages • 為了促使程式碼重用 (code reuse), 並有助於組成 classes, Java 提供一個強而有力的工具,將相關的 class 和 interface 收集在一個directory (目錄) 內,稱之為 packages . • 要建立一個 package (即,加 class 到某一個 package),只要在你 的 source code file 的第一行(任何 class 宣告之前)使用以下的 statement : • package PackageName; • //而且這些class 都會存在名為 PackageName 目錄下。 • 有 package statement 的 source file 內的每一個 class 都被認為是該 package 的一部份。

  2. 套件 (Package) 的編譯與執行 • 「套件 (package)」 概念的主要用途就是用來將類別做分類管理,並且讓類別的使用能夠更方便。 • 定義及編譯套件 • 如果要定義套件,我們可以使用以下語法 • 套件的定義敘述句必需置放於程式中非註解的第一行。 • 程式中不可以有一行以上的「package」敘述句。 package packagename;

  3. package • package的引用: import java.util.Arrays; 其中「java.util」就是package名稱。 • 自訂package: 要在類別最上方撰寫: package 套件名稱; 這樣就可以自訂套件了。 • Java中的package採用目錄表示法,也就是說如果您的package名稱是MyPackage,那麼您這個類別就會將自訂的 *.class放在MyPackage目錄下。

  4. Java 使用 file system directories (檔案系統目錄) 來儲存 package • 同一個程式下的不同 class 可以分開儲存在同一目錄下的不同檔案中。不同 class可以分別compile ,然後執行有main()的class既可。系統自然會去連結同一目錄下的其他的 class • 不同的檔案可以包含相同的 package statement, 你可以建立一個 package 的階層,只要使用 "." , 來與它的上層 package name 隔開。多層 package statement 的一般型式如下: package pkg1[.pkg2] [.pkg3] ; Ex: import java.util.Arrays;

  5. package pack2; • class Rectangle // 請參考第八章 • { . • . • . • } • public class TestRectangle // 同一java檔案中的class,只能有一個是public. • { public static void main(String args[]) • { . • . • } • } 編譯與執行步驟: 1.若TestRectangle.java 位於 work\pack2目錄, 執行 (javac pack2\TestRectangle.java ) 之後會自動在 work\pack2 目錄下產生 Rectangle.class, TestRectangle.class兩個檔案. 2.可位於 work目錄,執行 java pack2.TestRectangle. 3.若以上的兩個類別分開儲存成 pack2\Rectangle.java, pack2\TestRectangle.java (檔案中之第一行已經加入package pack2;),經分開編譯之後,亦可以上列的格式執行 .

  6. //若TestRectangle.java 位於 work\pack4a目錄, 執行 (javac pack4a\TestRectangle.java ) //之後會自動在 work\pack4a 目錄下產生 TestRectangle.class package pack4a;public class TestRectangle // 將TestRectangle 納入package pack4a當中{ public static void main(String args[]) { pack4b.Rectangle r=new pack4b.Rectangle(); // 請參考第八章 TestRectangle.java //Rectangle.java 位於 work/pack4b目錄, 執行(javac pack4b\Rectangle.java ) 之後會自動在 work\pack4b 目錄下產生 Rectangle.class package pack4b; public class Rectangle { . // 請參考第八章 tRectangle.java . . } // Rectangle 要宣告成public才能被其他的package使用

  7. //若Point.java 位於 \packA\subpackA目錄, 執行(javac \packA\subpackA\Point.java ) //之後會自動在 \packA\subpackA資料夾內產生 Point.class package packA.subpackA; public class Point { . . } //若Circle.java 位於 packA\subpackB目錄, 執行 (javac packA\subpackB\Circle.java )之後會自動在 packA\subpackB資料夾內產生 Circle.class package packA.subpackB; public class Circle { . . } //若TestPointCircle .java 位於 packA\目錄, 執行(javac Circle.java ) //之後會自動在 packA\資料夾內產生 TestPointCircle.class package packA; // 將 TestPointCircle類別納入package packA當中 import subpackA.Point; // 載入packA\subpacka裡的Point.class import subpackB.Circle; // 載入packA\subpackb裡的Circle.class public class TestPointCircle { . . }

  8. Package 之階層關係 ..packA\subpackA\Point.java package packA.subpackA; ..packA\TestPointCircle.java package packA; ..packA\subpackB\Circle.java package packA.subpackB; C>javac packA\subpackA\Point.java C>javac packA\subpackB\Circle.java C> javac packA\TestPointCircle.java C>java packA.TestPointCircle

  9. 套件 (Package) 的編譯與執行… • package的名稱可以是一組有意義的文字,也可以是一連串以句號 ( . ) 組合而成的文字。 您可以將套件名稱中的句號 ( . ) 當做是Windows作業系統下的表示路徑的分隔符號 ( \ )。例如: • 預設的情況下,原始檔在編譯後,會在原始檔所在的目錄下產生「stock」資料夾,並在「stock」資料夾下再產生「sale」子資料夾,而編譯後的「Customer.class」檔案就會放在「sale」資料夾中。 package stock.sale; public class Customer {}

  10. 8-2 套件 (Package) 的編譯與執行… • Java程式中的每一個類別檔都一定是屬於某一個套件,位於同一個套件下的類別檔可以互相的引用。 • 對於沒有定義package敘述句的Java檔案,它們所產生的類別檔是置放於「預設套件 (default package)」中,也就是Java原始檔案所在的同一個目錄 (現行目錄) 下。

  11. 套件 (Package) 的編譯與執行… • 如果要在現行目錄下直接編譯具有package敘述句的Java程式時,我們必需在「javac」指令後方再加上「-d」參數,參數後方再加上目錄名稱,目前我們可以使用句點 ( . )來代替現行目錄。最後再加上需要編譯的程式名稱。例如: • 如果需要,您也可以一次編譯兩個以上的Java原始檔,例如: javac –d . myPackage.java javac –d . myPackage.java myPackage.java

  12. 套件 (Package) 的編譯與執行… • 如果不特別指定「-d」參數來編譯具有「package mypackage;」敘述的java原始檔。以範例中的「mypackage.java」為例,我們可以依照以下的方式來完成開發及編譯的流程: 一、在現行目錄下建立mypackage資料夾。 二、在現行目錄下使用編輯軟體撰寫程式。 三、將程式檔儲存在現行目錄下的mypackage資料夾中,並命名為「mypackage.java」。 四、在現行目錄下,使用「javac」指令,並指明程式檔的儲存相對路徑及檔名,來編譯程式。指令如下:「javac .\mypackage\mypackage.java」。

  13. 引用套件下的類別 • 我們可以利用「import」敘述來將相關的套件引入,並使用該套件中的類別檔。import敘述的使用方式如下: • 您可以在程式中重覆的使用「import」敘述,以便引入多個套件。程式中也可以使用「*」來代表要引入套件下的所有類別。 • 每個Java程式都會有預設的import敘述句,該敘述句會將java.lang套件下的所有類別引入。 import java.awt.color; import java.awt.*;

  14. 使用import static敘述-J2SE 5.0 • 新的import敘述句可以直接將類別中的static方法引入,讓使用該方法時,不需要再加上類別的名稱。新的import敘述句多了一個static關鍵字,語法如下: • 例如:如果要把out方法引入,我們可以使用以下的程式碼: • 引入之後,我們可以用以下的方法來使用out敘述句: import static 套件名稱.類別名稱.方法名稱; import static java.lang.System.out; out.println();

  15. 使用jar檔 • 「jar」是Java Archive的簡稱,它可以當作是類別的集合。 • jar是以ZIP的壓縮格式來處理的,您可以將某個package下的所有類別檔或是子目錄打包成一個jar檔案。 • 您只提供該jar檔,別人就可以使用您開發的程式了。您可以使用「jar」指令將檔案打包成單一的jar檔。「jar」的指令為: jar [參數] 目的檔名 要加入的檔案或路徑

  16. 使用jar檔… • 「jar」的指令可以使用的參數如下:

  17. 使用jar檔… jar -uvf test.jar myPackage\Update.class • 更新JAR檔案的內容:使用u參數 • 顯示JAR檔案的內容:使用tf參數 • 取出JAR檔案的內容:使用xf參數 jar uvf test.jar myPackage jar xf test.jar

  18. 使用JAR檔案中的類別 • 您有三種方式可以使用到某個JAR檔中的類別。 • 第一種方式是直接將JAR放在「JAVA_HOME」所設定的路徑中。 • 第二種方式是在每次編譯引入套件的Java檔案時,使用「classpath」參數來指明JAR檔案的位置。 • 第三種方式是直接設定CLASSPATH的路徑。 javac –classpath C:\Work\Chap8\display.jar UseJar.java

More Related