Java中的軟體包

來源:互聯網
上載者:User
Java中的軟體包
    由於所有的Java類組合在一塊形成軟體包,所以,沒有它們將什麼也做不了。
    本章先概覽Java軟體包的文法和語義,接下去討論Java和Visual J++的一些軟體包。讀者可能已經注意到,實際上,編程已經用到的類都包含在這些預定義的軟體包中。使用現成的軟體包比建立新的軟體包要普遍,但是,有時使用者也需要建立自己的軟體包,所以,這裡將舉例說明怎樣實現自己建立軟體包。
    在文章中,讀者可以學習到:
*軟體包和檔案夾的關係;
*Java中的固有軟體包;
*Windows Foundation Class(WFC,視窗基類)的架構結構和WFC的軟體包;
*建立使用者自己的軟體包。
---------------------使用者將建立:-----------------------------
*能從剪貼簿上讀取字串和把字串寫到剪貼簿的應用程式;
*一個時鐘應用程式;
*一個公用程式:包含一個能對兩個數進行求和的簡單類。
-----------------------------
什麼是軟體包
    軟體包是Java最主要的組織實體,它從邏輯上把相關類組合到一起,還定義了類之間的一種訪問形式。每個應用程式都有一個預設的軟體包,它包含了代碼中引用到的所有軟體包。
    定義一個類作為命名資料包的成員
*在原始碼中的第一行包含“package”語句:
 package pkgname;
    pkgname的取值就是軟體包的名稱,它必須同原始碼所在的檔案夾名或目錄名匹配,下面是MyStuff軟體包的package語句:
 package MyStuff;
    package語句必須出現在原始碼的開頭,它前頭只允許有空行和注釋。package語句對在原始碼檔案中定義的所有類都適用。
軟體包和檔案系統
    軟體包和檔案系統有密切的關係,這種關係是公用類和檔案聯絡的紐帶。
    公用類必須存放在與它同名的檔案中,這就是說,取名MyClass的公用類必須存放在名為MyClass.java的原始碼檔案中。
    包含package語句的檔案也必須存放在同名的檔案夾中,比如,下面這幾行代碼錶明:名稱為MyStuff的檔案夾中有名稱為MyClass.java的檔案:
 package MyStuff;
 public class MyClass
    類檔案的位置也很重要,編譯這個原始碼檔案建立兩個類檔案,MyClass.class和MyHelper.class,這些類檔案必須存放在命名為MyStuff的檔案夾中:
  package MyStuff;
 public class MyClass
 {
  ...
 }
 class MyHelper
 {
  ...
           }
    產生兩個類檔案MyClass.class和MyHelper.class。這些類檔案一定在名字為MyStuff的檔案夾中。軟體包的名稱可以包含多個由英文句號分隔的標識符;名稱的每一部分隱含著一個獨立的檔案夾。比如,下面的代碼錶明:名稱為MySubPackage的檔案夾中有名稱為MyClass的檔案,還有,MySubPackage檔案夾在MyStuff檔案夾中。
 package MyStuff.MySubPackage;
    public class Myclass
 {
  ...
 }
    軟體包的名稱表明一個存放在特定路徑下的特定的軟體包,存放在不同檔案夾中的同名的軟體包之間、或者不同軟體包中同名的類之間都沒有特殊的關係;在上面的第一個例子中,軟體包的名稱是MyStuff,第二個例子中軟體包的名稱是MyStuff.MySubPackage。一個軟體包可以存放在另外一個軟體包的子檔案夾中,但是,這兩個軟體包中的類卻沒有關係;類似的,MyStuff.MyClass和MyStuff.MySubPackage.MyClass這兩個類之間也沒有特殊的關係。
類路徑
    類路徑是一些檔案夾(或目錄)的序列,這些檔案夾組合起來形成一個應用程式的預設軟體包;所有命名的軟體包都可以在類路徑上檔案夾的子檔案夾中找到,軟體包檔案夾是類路徑檔案夾的一個子檔案夾。比如,假定類路徑由下面的檔案夾組成:
 C:/Windows/Java/Classes
 C:/Windows/Java/Lib
 C:/MyLibrary
    類檔案C:/Windows/Java/Classes/Utilities.class就直接存放在預設的軟體包中。
    現在,假定通過編譯下面命名為MyClass.class檔案中的幾行代碼來建立一個類路徑上的類檔案:
package MyStuff;
public class MyClass
{
 ...
}
    MyStuff.MyClass檔案可能在以下檔案夾的任意一個當中:
 C:/Windows/Java/Classes/MyStuff*C:/windows/Java/Lib/MyStuff
 C:/MyLibrary/MyStuff
    另外,大多數的Java虛擬機器(VM)能夠使用以ZIP、JAR或CAB形式儲存的類檔案,不過,這些ZIP、JAR或CAB檔案必須顯式地列在類路徑當中;這些壓縮檔可以包含別的檔案,也可以包含帶有許多子檔案夾的檔案夾的資訊。
    可以用下面兩個檔案夾來更新類路徑:
  C:/Windows/Java/Classes/Classes.ZIP
  C:/Library/MyClasses.CAB
    現在,類檔案MyClass.class可能出現在Classes.Zip或者MyClasses.CAB中。如果它包括在MyClasses.CAB中,則把它儲存在子檔案夾MyStuff中。
存取控制
    跟訪問有關的三個訪問修飾字:public(公用),private(私人)和protected(保護)。
    我們已經介紹過沒有關聯關鍵字的第四種訪問方式:default access(預設訪問);具有預設訪問的項只能被在同一軟體包中定義的項訪問;由於它只給相同軟體包中的成員分配存取權限,所以也稱它為軟體包訪問(package access)。比如,在下面的代碼中,一個類和一個方法是公用的,同時它們都有預設訪問:
 package MyStuff;
 public class MyClass
{
public void getMoreStuff()
{
  ...
}
void doSomeMore()
{
 ...
}
}
 class Helper
 {
}
    通過上面的介紹可以知道,下面的說法都是正確的:
*任意類都可以定義MyStuff.MyClass類型的成員變數;
*任意類中的方法可以定義MyStuff.MyClass類型的局部變數;
*如果給定一個MyStuff.MyClass對象,則任意類中的方法可以調用getMoreStuff方法;
*只有在MyStuff軟體包中的類才可以定義MyStuff.Helper類型的成員變數;
*只有在MyStuff軟體包的類中的方法才可以定義MyStuff.Helper類型的局部變數;
*如果給定一個MyStuff.MyClass對象,則只有在MyStuff軟體包中的類中的方法才可以調用doSomeMore方法。
    有了預設訪問或軟體包訪問,軟體包的的建立者就可以定義只能被相同軟體包中的其他類進行訪問的類、方法和成員變數。
Java軟體包
    我們來快速探索一遍Java VM內建的一些軟體包。這些包是作為以“java.”開頭的可移植、擴充的Java庫的一個標準部分發布的;下面將詳細地介紹java.lang軟體包,並匯總說明其他八個軟體包。
Java.lang軟體包
    Java語言的核心部分就是java.lang軟體包,它定義了Java中的大多數基本的類。它的核心地位是顯然的:每一個Java原始碼檔案都引入了java.lang類中的語句:
    import java.lang.*;
    java.lang軟體包包含了Object(目標)類,java.lang.Object類式Java中整個類階層的根節點,這個軟體包還定義了基礎資料型別 (Elementary Data Type)的類:
    String          Boolean
    Character       Byte
    Integer         Short
    Long           Float
    Double
    這些類支援數字型的轉換和字串操作,在前面的章節裡已經詳細地介紹了這些內容。定義在java.lang中的其他一些類列在下表中
java.lang軟體包中定義的幾個重要的類
--------------------------
java.lang的類                             說明
--------------------------
Class                 為運行時搜集的資訊救鏸nstanceof操作符提供支援
Math                 提供像pi和e這樣的數學常數,還支援三角函數
System                 提供對作業系統的訪問,包括預設的I/O流、環境變數、自動垃圾收集、系統時間和系統屬性;許多System方法訪問Runtime類的方法
Runtime                 提供對作業系統的訪問;使用java.lang.System可以更容易地訪問大多數Runtime方法;唯一的例外是exec方法,它開始一個新進程Thread                 和java.lang.Runnable介面協同作用提供Java中的多線程支援;
Throwable             它是Java中所有異常(Exception)的基類,是java.lang.Exception、java.lang.Error和java.lang.RuntimeException的超類。應用程式運行時發生意外時,異常和錯誤就發出訊號;
現在再看看別的一些Java軟體包:
 java.applet---Java的小程式和聲音編輯提供支援;
 java.awt---Java固有的視窗和繪圖軟體包:抽象視窗工具(AWT-Abstract Window Toolkit),該工具包含像字型、顏色和形狀一類的基本繪圖功能,還支援一些組件,如按鈕、列表框、菜單、文字框以及控制安排組件的布局管理器。AWT是可移植的
java.beans---Java Beans定義了API(API);Java Beans是Java應用程式環境的中性平台組件結構;
java.io---定義了大量的本地I/O支援類;它既支援位元組流I/O,也支援字元流I/O。
java.math---支援任意精度值的數學運算,包含兩個類:BigDecimal和BigInteger。
java.net---支援基於URL的,也支援基於通訊端的網路I/O;
java.text---為國際化的應用程式提供類,包括:日期格式、數字、貨幣格式及排序的順序。
java.util---包括其他方面的類來支援資料結構、隨機數、日期、時區及日曆等。
WFC軟體包
    到現在為止,出現過的多數代碼使用了Visual J++帶來的視窗基底類別庫(WFClibrary-Windows Foundation Class library),所有的WFC類在com.ms.wfc中的軟體包裡。
*app---包含支援應用程式的類,包括:Application(應用程式)、Message(訊息)、Window(視窗)、Clipboard (剪貼簿)、
DataFormat(資料格式)、 Registry(註冊)、 Time(時間)、 Timer(定時器)和 Version(版本)。
*它是個很重要的的軟體包,在大略瀏覽了主要的WFC軟體包之後,將花些時間介紹這個包中的幾個重要的類。
*core---WFC應用程式和視圖設計器(View Designer)定義了核心類,包括Component(組件)、Container(包容器)、 Event(事件)、EventHandler(事件處理常式)、EventInfo(事件資訊)、ClassInfo(類資訊)和Enum(枚舉)等類。該軟體包還定義了在視圖設計器中使用的一些基本編輯器。
*data和data.ui---提供使用ADO(ActiveX Data Objects)的資料庫訪問。
*html---支援超文本連結(HTML-Dynamic HTML)。
*io---支援Win32格式的檔案I/O。
*ole32---對OLE的拖放提供支援。
*ui---定義WFC中的使用者介面組件,讀者其實已經大量地使用了該軟體包中的類了:因為每次用到一個表單(Form)時,都會用到包中的類。
*util---為資料結構定義一些實用類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.