包package
什麼是包?
用來對類文件進行分類管理的,當類的內容不一樣,但名稱一樣時,在同一個文件夾下不能保存同一個類文件,這個時候需要對類文件進行分類管理,將一個功能的所有class文件封裝到一個文件夾中,這個文件夾就是包。
包也是一種封裝形式,Java中包的出現,使不同的包中可以有相同名稱的類文件,調用的時候連同包名一起就行了。
(私有也是一種封裝形式,函數也是封裝,類也是封裝,但封裝不是私有;現在應該理解了)
包的作用和特點:
- 給類文件進行分類管理
- 給類提供多層命名空間
- 寫在程序的第一行
- 類名的全稱是包名.類名
- 包也是一種封裝形式
包的使用過程演示:
//包的基本應用
package pack;
public class PackageDemo {
public static void main(String[] args)
{
System.out.println("Hello Package!");
}
}
按照以前的方法編譯完成,在運行的時候會出現以下的結果:
圖中可以看到,發生錯誤:類文件未找到錯誤
注意:有了package之後就不能按照以前的方法進行編譯和運行了
應該這麼運行,將class文件導存入到指定的包文件夾中,使用命令javac -d . PackageDemo.java
然後在運行之前將classpath路徑設置到指定的文件夾
然後使用運行命令:java pack.PackageDemo運行class文件:
包與包之間進行訪問
- 包與包之間進行訪問,被訪問的包中的類以及類中的成員都需要被public 修飾。
- 要訪問其他包中的類,需要寫上類的全稱:包名.類名
- 如果包的路徑不在當前Java文件的路徑的時候,在運行(Java命令)的時候,需要設置classpath的值,給(jvm)虛擬機指明路徑。
- 不同包中的子類還可以直接訪問父類中被protected權限修飾的成員
- 在同一個包中,protected修飾的類只作爲覆蓋方法使用,其實protected就是給其他包中的子類提供了一種權限。
包與包之間可以使用的權限只有兩種,public protected
包與包之間的聯繫練習:
package packa;
public class DemoA extends packb.DemoB
{
public void methodA()
{
System.out.println("demo methodA run");
functionB();
}
}
package packb;
public class DemoB {
protected void functionB()
{
System.out.println("DemoB function run");
}
}
//包功能演示
package pack;
public class PackageDemo {
public static void main(String[] args)
{
packa.DemoA a = new packa.DemoA();
a.methodA();
/*
packb.DemoB b = new packb.DemoB();
b.functionB();
編譯失敗,因爲DemoB的方法被protected修飾,如果不是DemoB的子類無法調用此方法
protected修飾方法的時候,該方法只可以被該類的子類繼承,非子類不可以調用該方法。
*/
}
}
實驗結果爲:
dos 命令行代碼依次是:
1,設置classpath路徑
2,編譯DemoB.java並將class文件存放到指定路徑下的指定包中
3,編譯DemoA.java並將class文件存放到指定路徑下的指定包中
4,編譯PackageDemo.java並將class文件存放到指定路徑下的指定包中
5,運行PackageDemo.java文件,命令爲java 包名.類名
那麼知道了修飾class的關鍵字有這麼多之後,
我們總結一下各個類的權限大小,以及在各級目錄下能不能訪問呢?
需要注意的是:一個.java文件中可以出現兩個類,但是被public修飾的類只能有一個。
導包——import
- 自從引入包的概念之後,我們知道,所有類的全程都是包名.類名,然後我們在每次new對象的時候都要寫一長串的包名嗎?NO!爲了簡化類的書寫,使用的一個關鍵字:import。
- 注意:import導入的是包中的類,對於包中還有的子包中的類是導不進來的。
- 如果需要該包中的所有類的時候,也不用一個一個的導入,可以直接寫包名.*;
- 不過一般不建議寫通配符*,因爲需要使用往往是包中的某個類,沒有必要把包中的所有類都導進來,沒什麼用!
- 當包的不同目錄下有相同名字的類名的時候,使用該類new對象的時候,需要明確是哪個包中的類(即寫包名.類名),否則虛擬機不知道該new哪個對象。
- 爲了不出現類名重複的情況,我們在定義包名的時候通常這麼寫:倒着寫的域名.包名
舉個例子:定義包名的時候:package cn.itcast.demo;
出現的包的目錄就是myclass\cn\itcast\demo\*
代碼示例:
package cn.itcast.test;
public class DemoA extends packb.DemoB
{
public void methodA()
{
System.out.println("demo methodA run");
functionB();
}
}
運行過程及實驗結果:
Java的壓縮包——jar包
- 方便項目的攜帶;
- 方便於使用,只要在classpath設置jar的路徑即可。
- 數據庫驅動,SSH框架等都是以jar包體現的。
jar包的操作:
創建jar包:
jar命令 功能符號組合 要創建的jar包名字 要壓縮的包文件名稱
jar -cvf mypack.jar packa packb
查看jar包:
jar命令 功能符號組合 已經創建好的jar包文件 > 路徑和指定的要存儲到的文件目錄
jar -tvf mypack.jar >d:\1.txt
解壓縮:
jar -xvf mypack.jar
自定義jar包的清單文件:
jar -cvfm mypack.jar mf.txt packa packb