Java基礎_13 | Java中包的概念和使用詳解

1.爲什麼需要包

默認情況下編譯一個.java文件,編譯之後該文件中的每個類都會生成一個<類名>.class文件,我們可以直接通過類名找到這個類,比如:

class A
{
	public void fun()
	{
		System.out.println("Hello");
	}
}
class TestA
{
	public static void main(String[] args)
	{
		A a1 = new A();
		a1.fun();
	}
}

編譯:

javac TestA.java

編譯完成後源文件的目錄下生成的類文件如下:

直接使用java <類名>即可運行該類(前提是該類是主類,有main方法):

爲了更好的管理類,Java中提供了包管理方式。

2.包的使用方式

2.1.包的聲明

  • 必須在文件的第一行使用package關鍵字聲明該文件中所有的類所在的包
  • 可以使用.表示包層(比如packge a.b表示該文件中的類位於包a中的包b中);

比如之前的文件要聲明包,在代碼開頭添加一行代碼,聲明該文件中的類屬於包Test:

package Test;	//聲明在該文件中的類在包Test中

class A
{
	public void fun()
	{
		System.out.println("Hello");
	}
}
class TestA
{
	public static void main(String[] args)
	{
		A a1 = new A();
		a1.fun();
	}
}

2.2.編譯運行含有包層的類

聲明之後不可直接使用類名找到該類並運行,要通過<包名>.<類名>找到該類。

比如

package Test;

再次編譯:

javac TestA.java

編譯之後生成的類文件還是和之前一樣,但是直接訪問類會出錯:

再使用<包名>.<類名>訪問:

依然會出錯,這是爲什麼呢?

我們雖然在文件中使用package聲明瞭包,但是因爲在編譯時沒有加入自動生成包層的參數,所以不會自動組織文件,需要手動組織文件。

在源文件目錄下新建一個文件夾Test表示Test包,然後將生成的.class文件放到該包的文件中:

然後再次使用<包名>.<類名>訪問,成功訪問到主類:

上面的步驟需要自己手動名建立文件夾和包層對應,這樣的過程過於麻煩,使用Javac編譯器編譯時,可以直接加入-d .參數,表示在當前目錄下自動建立包層

javac -d . TestA.java


3.同包和不同包類的相互訪問

3.1.訪問權限

  • 同一個包中:只有私有的成員不能被訪問,也只有私有的成員不能被繼承
  • 不同包中,如果無任何關係:只有public類的public成員纔可以被外部的包訪問;
  • 不同包中,如果有繼承關係
    • 子類內部:只有public類的public成員和protect成員可以被訪問;
    • 子類外部:只有public類的public成員可以被訪問;

3.2.如何使用不同包中的類

使用不同包中的類時,需要提前使用import關鍵字將包中的類導入:

import <包名>.*;			//將該包中所有的類都導入
import <包名>.<類名>;	//將該包中指定的類導入

4.歸檔工具jar

4.1..jar文件

Java歸檔工具是jdk中提供的一種多用途的存檔及壓縮工具,可以將多個文件或目錄合併爲一個.jar歸檔文件。

.jar文件的主要作用有:

  • 發佈和使用類庫;
  • 便於資源的組合和管理;

4.2.如何打包

  1. 將需要打包的文件放在一個乾淨的的文件夾下;
  2. 命令行進入該文件夾;
  3. 使用命令打包:
jar cvf <包名>.jar *

其中:

  • jar是jdk中的打包工具;
  • cvf是打包固定參數:c表示打包,v表示打包時輸出信息,f表示打包的是文件;
  • <打包後的文件名>.jre表示打包後的文件名;
  • *表示將該文件夾下的所有文件打包;

4.3.如何打開/運行

  • 使用解壓縮工具或者jar工具使用xvf參數解壓:.jar包中無啓動類
  • 命令行運行:.jar包中含有啓動類(有main方法);
  • 雙擊運行:.jar包中含有啓動類(有main方法),並且創建了圖形化用戶界面

注:

如果我們僅僅想在別的文件中使用jar包中的類,需要將jar文件放置在該文件的目錄下,否則,需要在classpath環境變量中設置jar文件及其所在目錄(需要將.jar文件也設置進去);

接收更多精彩文章及資源推送,歡迎訂閱我的微信公衆號:『mculover666』

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章