鍍金池/ 教程/ Java/ Java包
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運算符
Java抽象類
Java快速入門
Java實例初始化程序塊
Java靜態(tài)綁定和動態(tài)綁定
Java do-while循環(huán)
Java對象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點
Java數(shù)組
Java instanceof運算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡單Java程序
Java基礎(chǔ)實例程序
Java對象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細(xì)節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習(xí)Java編程?
對象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java包

一個java包是一組相似類型的類,接口和子包。java中的包可以分為兩種形式,內(nèi)置包和用戶定義包。

java中有很多內(nèi)置的包,如:java,lang,awtjavax,swingnet,io,utilsql等。

在這里,我們將詳細(xì)學(xué)習(xí)創(chuàng)建和使用用戶定義的包。

Java包的優(yōu)點

  1. Java包用于對類和接口進行分類,以便更好地維護它們。
  2. Java包提供訪問保護。
  3. Java包消除命名沖突。

java包的簡單示例

package關(guān)鍵字用于在java中創(chuàng)建一個包。

//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 指定放置生成的類文件的目標(biāo)位置。 您可以使用任何目錄名稱,如/home(在Linux的情況下),D:\workspace(在Windows的情況下)等。如果想保持包在同一目錄,可以使用.(點)表示當(dāng)前目錄。

如何運行java包程序

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

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

輸出結(jié)果如下 -

Welcome to package

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

如何從一個包中訪問另一個包?

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

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

1. 使用 packagename.

如果使用package.*,那么這個包的所有類和接口都是可訪問的,而不是子包。
import關(guān)鍵字用于使當(dāng)前包可訪問的另一個包的類和接口。
導(dǎo)入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();  
  }  
}

執(zhí)行上面代碼,輸出結(jié)果如下 -

Hello

2. 使用packagename.classname

如果要導(dǎo)入package.classname,那么只有這個包的類聲明為可訪問的。

通過導(dǎo)入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();
    }
}

執(zhí)行上面代碼,輸出結(jié)果如下 -

Hello

3. 使用完全限定名

如果使用完全限定名,那么只有這個包的聲明類將可訪問?,F(xiàn)在沒有必要導(dǎo)入,但是需要在每次訪問類或接口時使用完全限定名。
它通常用于兩個包具有相同類名的情況。 java.utiljava.sql包包含Date類。

通過導(dǎo)入完全限定名稱的包的示例
創(chuàng)建一個Java文件:A.java,其代碼如下所示 -

//save by A.java  
package pack;

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

創(chuàng)建另一個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();
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

Hello

注意:如果導(dǎo)入包,則不會導(dǎo)入子包。

如果導(dǎo)入包,則將導(dǎo)入該包的所有類和接口,但不包括子包的類和接口。 因此,您還需要導(dǎo)入子包。

注意:程序的序列必須先是包,然后再導(dǎo)入類。

在java中的子包

包內(nèi)的包稱為子包。創(chuàng)建它用以進一步分類包。
舉個例子,Sun Microsystem定義了一個名為java的包,其中包含了很多類,比如System,String,Reader,WriterSocket等。 ReaderWriter類用于輸入/輸出操作,SocketServerSocket類用于網(wǎng)絡(luò)等等。 所以,Sun已經(jīng)將java包子類化為子包,如:langnet,io等,并將輸入/輸出相關(guān)類放在io包中,將ServerServerSocket類放在net包中等等。

注:定義包的標(biāo)準(zhǔn)是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");
    }
}

編譯執(zhí)行的命令javac -d . Simple.java
運行執(zhí)行的命令java com.yiibai.core.Simple

Hello subpackage

如何將類文件發(fā)送到另一個目錄或驅(qū)動器?

有一個場景,想要把A.java源文件的類文件放在C 盤的classes文件夾中。 例如:

首先在 E:\source 目錄中創(chuàng)建 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目錄運行此程序,需要設(shè)置類文件所在目錄的類路徑。

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

執(zhí)行上面代碼,得到以下結(jié)果 -

Welcome to package

加載類文件或jar文件的方式
有兩種方法用來臨時和永久加載類文件。

  • 加載臨時類文件

    • 通過在命令提示符中設(shè)置類路徑
    • 通過 -classpath 開關(guān)選項
  • 永久加載類文件

    • 通過在環(huán)境變量中設(shè)置類路徑
    • 通過創(chuàng)建jar文件,其中包含所有類文件,并將jar文件復(fù)制到JDK安裝目錄的jre/lib/ext文件夾中。

規(guī)則:在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{}