跳轉到內容

100% developed
來自華夏公益教科書,開放的書籍,開放的世界

導航 語言基礎 主題:v  d  e )


如果您的應用程式變得相當大,您可能會有很多類。儘管您可以按字母順序瀏覽它們,但這會變得很混亂。因此,您的應用程式類可以被分類到中。

包是一個名稱空間,主要包含類和介面。例如,標準類ArrayList位於包java.util中。對於此類,java.util.ArrayList被稱為其完全限定名,因為這種語法沒有歧義。不同包中的類可以具有相同的名稱。例如,您有兩個類java.util.Datejava.sql.Date,它們是不一樣的。如果在類中沒有宣告任何包,則其包是預設包。

包宣告

[編輯 | 編輯原始碼]

在類中,包宣告位於原始碼的頂部,使用關鍵字package

Computer code 程式碼清單 3.14:BusinessClass.java
package business;

public class BusinessClass {
}

如果你的類是在一個包中宣告的,比如 business,你的類必須放置在應用程式資料夾根目錄下的一個名為 business 的子資料夾中。這是編譯器和類載入器在檔案系統中查詢 Java 檔案的方式。你可以在一個子包中宣告你的類,比如 engine。所以完整的包是 business.engine,並且類必須放置在 business 子資料夾中的一個名為 engine 的子子資料夾中(而不是在一個名為 business.engine 的資料夾中)。

匯入和類使用

[編輯 | 編輯原始碼]

使用包中宣告的類的最簡單方法是在類名前面加上它的包名

Example 程式碼段 3.88:包宣告。
business.BusinessClass myBusinessClass = new business.BusinessClass();

如果你正在從同一個包中的類使用該類,你不需要指定包名。如果另一個包中存在具有相同名稱的類,它將使用本地類。

上面的語法有點冗長。你可以使用 import Java 關鍵字在檔案頂部匯入類,然後只指定它的名稱

Computer code 程式碼清單 3.15:MyClass.java
import business.BusinessClass;

public class MyClass {
  public static void main(String[] args) {
    BusinessClass myBusinessClass = new BusinessClass();
  }
}

注意,你不能在兩個不同的包中匯入兩個具有相同名稱的類。

IntegerString 屬於包 java.lang,但它們不需要匯入,因為 java.lang 包在所有類中都是隱式匯入的。

萬用字元匯入

[編輯 | 編輯原始碼]

可以使用星號匯入整個包

Example 程式碼段 3.89:萬用字元匯入。
import javax.swing.*;

雖然這看起來很方便,但如果出現打字錯誤,可能會導致問題。例如,如果你使用上面的匯入來使用 JFrame,但然後輸入 JFraim frame = new JFraim();,Java 編譯器將報告一個類似於“無法找到符號:JFraim”的錯誤。即使它看起來像是被匯入了,編譯器會在你第一次提到 JFraim 時給出錯誤報告,而這時你的程式碼已經進行了一半,而不是在你匯入 JFrame 以及 javax.swing 中所有其他內容的地方。

如果你將其改為 import javax.swing.JFraim;,錯誤將在匯入處出現,而不是在程式碼中。

此外,如果你 import javax.swing.*;import java.util.*;,並且 javax.swing.Queue 在 Java 的未來版本中被新增,你使用 Queue(java.util)的程式碼將無法編譯。這個特定的例子不太可能發生,但如果你正在使用非 Oracle 庫,它發生的可能性更大。

包約定

[編輯 | 編輯原始碼]

包名應該以小寫字元開頭。這有助於區分包名和類名。在一些作業系統中,目錄名不區分大小寫。因此包名應該小寫。

Java 包需要在不同廠商之間保持唯一性,以避免命名衝突。為此,廠商通常使用反轉的域名。這樣可以保證唯一性。例如,一家名為“您的公司有限公司”的公司可以使用類似於這樣的包名:com.yourcompany.yourapplicationname.yourmodule.YourClass

從 .jar 檔案匯入包

[編輯 | 編輯原始碼]

如果你正在匯入位於 .jar 檔案中的庫包和類,你必須確保該檔案在當前類路徑中(在編譯和執行時)。除了這個要求之外,匯入這些包和類與它們位於完整的擴充套件目錄結構中時相同。

例如,要編譯和執行專案頂層目錄中的一個類(包含兩個目錄 /source/libraries),你可以使用以下命令

Computer code 編譯
$ javac -classpath libraries/lib.jar source/MainClass.java

然後執行它,類似地

Computer code 執行
$ java -classpath libraries/lib.jar source/MainClass

以上是簡化的,並且要求 MainClass 在預設包中,或者在名為 source 的包中,這不是很理想。

使用 BlueJ,只需點選“工具、首選項、庫”,然後逐個新增 .jar 檔案。

類載入/包

[編輯 | 編輯原始碼]

Java 中一個類的執行時標識由其完全限定類名及其定義的類載入器決定。這意味著同一個類,由兩個不同的類載入器載入,在虛擬機器看來是兩種完全不同的型別。



華夏公益教科書