Java包


一個java包是一組相似型別的類,介面和子包。java中的包可以分為兩種形式,內建包和使用者定義包。

java中有很多內建的包,如:javalangawtjavaxswingnetioutilsql等。

在這裡,我們將詳細學習建立和使用使用者定義的包。

Java包的優點

  1. Java包用於對類和介面進行分類,以便更好地維護它們。
  2. Java包提供存取保護。
  3. Java包消除命名衝突。

java包的簡單範例

package關鍵字用於在java中建立一個包。

//save as Simple.java  
package com.yiibai;

public class Simple {
    public static void main(String args[]) {
        System.out.println("Welcome to package");
    }
}

如何編譯java包

如果您沒有使用任何IDE,則需要遵循以下語法:

javac -d directory javafilename

例如

javac -d . Simple.java

-d 指定放置生成的類檔案的目標位置。 您可以使用任何目錄名稱,如/home(在Linux的情況下),D:\workspace(在Windows的情況下)等。如果想保持包在同一目錄,可以使用.(點)表示當前目錄。

如何執行java包程式

您需要使用完全限定(指定)名稱。如:com.yiibai.Simple等來執行類。

編譯javac -d . Simple.java
執行java com.yiibai.Simple

輸出結果如下 -

Welcome to package

-d是一個開關,它告訴編譯器放置類檔案的位置,即它代表目的地。 .(點符號)表示當前檔案夾。

如何從一個包中存取另一個包?

有三種方法從包外部來存取一個包。它們分別如下 -

  1. import package.*;
  2. import package.classname;
  3. 完全限定名

1. 使用 packagename.

如果使用package.*,那麼這個包的所有類和介面都是可存取的,而不是子包。
import關鍵字用於使當前包可存取的另一個包的類和介面。
匯入packagename的包的範例。
一個Java檔案:A.java,在 pack 包下。

//save by A.java  
package pack;  
public class A{  
    public void msg(){System.out.println("Hello");}  
}

另一個Java檔案:B.java,在 mypack 包下,下面看看它是如何參照 pack 包中的 A.java 這個類。

//save by B.java  
package mypack;  
import pack.*;  

class B{  
  public static void main(String args[]){  
     A obj = new A();  
     obj.msg();  
  }  
}

執行上面程式碼,輸出結果如下 -

Hello

2. 使用packagename.classname

如果要匯入package.classname,那麼只有這個包的類宣告為可存取的。

通過匯入package.classname的包的範例
以下是 A.java 檔案中的程式碼 -

//save by A.java  

package pack;  
public class A{  
  public void msg(){System.out.println("Hello");}  
}

以下是 B.java 檔案中的程式碼 -

//save by B.java  
package mypack;

import pack.A;

class B {
    public static void main(String args[]) {
        A obj = new A();
        obj.msg();
    }
}

執行上面程式碼,輸出結果如下 -

Hello

3. 使用完全限定名

如果使用完全限定名,那麼只有這個包的宣告類將可存取。現在沒有必要匯入,但是需要在每次存取類或介面時使用完全限定名。
它通常用於兩個包具有相同類名的情況。 java.utiljava.sql包包含Date類。

通過匯入完全限定名稱的包的範例
建立一個Java檔案:A.java,其程式碼如下所示 -

//save by A.java  
package pack;

public class A {
    public void msg() {
        System.out.println("Hello");
    }
}

建立另一個Java檔案:B.java,其程式碼如下所示 -

//save by B.java  
package mypack;

class B {
    public static void main(String args[]) {
        pack.A obj = new pack.A();// using fully qualified name
        obj.msg();
    }
}

執行上面程式碼,得到以下結果 -

Hello

注意:如果匯入包,則不會匯入子包。

如果匯入包,則將匯入該包的所有類和介面,但不包括子包的類和介面。 因此,您還需要匯入子包。

注意:程式的序列必須先是包,然後再匯入類。

在java中的子包

包內的包稱為子包。建立它用以進一步分類包。
舉個例子,Sun Microsystem定義了一個名為java的包,其中包含了很多類,比如SystemStringReaderWriterSocket等。 ReaderWriter類用於輸入/輸出操作,SocketServerSocket類用於網路等等。 所以,Sun已經將java包子類化為子包,如:langnetio等,並將輸入/輸出相關類放在io包中,將ServerServerSocket類放在net包中等等。

註:定義包的標準是domain.company.package,例如:com.yiibai.beanorg.apache.dao

子包範例

package com.yiibai.core;

class Simple {
    public static void main(String args[]) {
        System.out.println("Hello subpackage");
    }
}

編譯執行的命令javac -d . Simple.java
執行執行的命令java com.yiibai.core.Simple

Hello subpackage

如何將類檔案傳送到另一個目錄或驅動器?

有一個場景,想要把A.java原始檔的類檔案放在C 盤的classes檔案夾中。 例如:

首先在 E:\source 目錄中建立 A.java 檔案,如下程式碼 -

//save as Simple.java  
package mypack;

public class Simple {
    public static void main(String args[]) {
        System.out.println("Welcome to package");
    }
}

編譯:

E:\sources> javac -d c:\classes Simple.java

執行:
要在E:\source目錄執行此程式,需要設定類檔案所在目錄的類路徑。

e:\sources> set classpath=c:\classes;.;
e:\sources> java mypack.Simple

另一種方式執行這個程式通過 -classpath切換java:

-classpath切換可以與javacjava工具一起使用。

要在E:\source目錄執行此程式,可以使用java的-classpath選項,告訴在哪裡查詢類檔案。 例如:

e:\sources> java -classpath c:\classes mypack.Simple

執行上面程式碼,得到以下結果 -

Welcome to package

載入類檔案或jar檔案的方式
有兩種方法用來臨時和永久載入類檔案。

  • 載入臨時類檔案

    • 通過在命令提示字元中設定類路徑
    • 通過 -classpath 開關選項
  • 永久載入類檔案

    • 通過在環境變數中設定類路徑
    • 通過建立jar檔案,其中包含所有類檔案,並將jar檔案複製到JDK安裝目錄的jre/lib/ext檔案夾中。

規則:在java原始檔中只能有一個公共類,它必須以公共類的名稱儲存。

//save as C.java otherwise Compilte Time Error  

class A {
}

class B {
}

public class C {
}

如何將兩個公共類放在包中?

如果想把兩個公共類放在同一個包中,有兩個java原始檔都包含一個公共類,只需保持包名稱相同即可。 例如:
檔案:A.java,程式碼如下所示 -

//save as A.java  

package yiibai;  
public class A{}

檔案:B.java,程式碼如下所示 -

//save as B.java  

package yiibai;  
public class B{}