Java基礎——包

包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

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