一個java包是一組相似型別的類,介面和子包。java中的包可以分為兩種形式,內建包和使用者定義包。
java中有很多內建的包,如:java
,lang
,awt
,javax
,swing
,net
,io
,util
,sql
等。
在這裡,我們將詳細學習建立和使用使用者定義的包。
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
是一個開關,它告訴編譯器放置類檔案的位置,即它代表目的地。 .
(點符號)表示當前檔案夾。
如何從一個包中存取另一個包?
有三種方法從包外部來存取一個包。它們分別如下 -
如果使用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
如果要匯入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
如果使用完全限定名,那麼只有這個包的宣告類將可存取。現在沒有必要匯入,但是需要在每次存取類或介面時使用完全限定名。
它通常用於兩個包具有相同類名的情況。 java.util
和java.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
注意:如果匯入包,則不會匯入子包。
如果匯入包,則將匯入該包的所有類和介面,但不包括子包的類和介面。 因此,您還需要匯入子包。
注意:程式的序列必須先是包,然後再匯入類。
包內的包稱為子包。建立它用以進一步分類包。
舉個例子,Sun Microsystem定義了一個名為java
的包,其中包含了很多類,比如System
,String
,Reader
,Writer
,Socket
等。 Reader
和Writer
類用於輸入/輸出操作,Socket
和ServerSocket
類用於網路等等。 所以,Sun已經將java包子類化為子包,如:lang
,net
,io
等,並將輸入/輸出相關類放在io
包中,將Server
和ServerSocket
類放在net
包中等等。
註:定義包的標準是
domain.company.package
,例如:com.yiibai.bean
或org.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
切換可以與javac
和java
工具一起使用。
要在E:\source
目錄執行此程式,可以使用java的-classpath
選項,告訴在哪裡查詢類檔案。 例如:
e:\sources> java -classpath c:\classes mypack.Simple
執行上面程式碼,得到以下結果 -
Welcome to package
載入類檔案或jar檔案的方式
有兩種方法用來臨時和永久載入類檔案。
載入臨時類檔案
-classpath
開關選項永久載入類檔案
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{}