包package詳解

一.情景需求:

1.描述:

新建一個文件名Demo1,在裏面寫一個類文件Demo1,然後再新建一個文件名Demo2,在裏面類文件仍然以Demo1命名,先對Demo1進行編譯,然後再對Demo2進行編譯,再運行Demo1的時候,輸出的是Demo2的main方法因爲後編譯的Demo2也會產生一個Demo1.class這個文件,後編譯的就會把前面編譯的給覆蓋掉。

2.實例:

(1) Demo1代碼如下:

class Demo1{
	public static void main(String[] args){
		System.out.println("這個是Demo1的main方法");
	}
}

(2) Demo2代碼如下:

class Demo1{
	public static void main(String[] args){
		System.out.println("這個是Demo2的main方法");
	}
}

(3) 運行結果:


(4) 存在的問題:如果出現相同的類名,那麼後編譯的就會把前面的覆蓋掉。

(5) 解決辦法:

包就可以解決這個問題,類名覆蓋的情況在現實開發中也存在很多,假設一個項目組10個人,這10個人各幹各的,最終把代碼合成一塊,如果這些人中一旦寫了同樣的類名,這時候後提交給服務器的就會把前面提交給服務器的給覆蓋掉,包就可以解決類名重複的問題。

二.包:

1.Java中的包就相當於windows中的文件夾。

2.包的作用:
(1) 解決類名重複產生衝突的問題。

(2) 便於軟件版本的發佈

3.定義包的格式:package 包名;

4.包名命名規範:包名全部小寫。

5.包語句要注意的事項:
(1) package語句必須位於Java文件中的第一個語句。import語句要放在package語句的下面。
(2) 如果一個類加上了包語句,那麼該類的完整類名就是: 包名.類名

(3) 一個Java文件只能有一個包語句

6.問題:當我們使用包以後,每次編譯的時候都需要自己創建一個文件夾,把對應 的class文件存儲到文件夾中。這樣會很繁瑣

解決方法:編譯時候使用javac -d 指定類文件的存放路徑   java源文件(javac -d . Demo1.java其中的.表示當前路徑下。)

7.實例

package aa;
class Demo1{
	public static void main(String[] args){
		System.out.println("這個是Demo1的main方法");
	}
}

運行結果如下圖所示:


三.導包語句:

1.存在的問題:有了包之後類與類之間的訪問每次都必須 要寫上包名!這樣會顯得很繁瑣。

   解決方案:sun提供了導包語句可以讓我們解決該問題。

2.導包語句的作用:簡化書寫。

3.導包語句的格式: import 包名.類名;   (導入xxx包中的某個類)

4.導包語句要注意的細節:

(1) 一個Java文件中可以出現多句導包語句。
(2) "*"是 導包語句的通配符。可以匹配任何的類名。(*號用作導包語句,只能用來匹配類名,不能匹配包名)
(3) import aa.*; 是不會作用於aa包下面的子包的。

5.推薦使用:import 包名.類名;   因爲使用*通配符會導致結構不清晰。

6.誤區:千萬不要認爲導包語句就是把一個類導入到內存中,導包語句只可以簡化書寫。所以,import aa.*;這種語法並不會使得效率降低,因爲只有當我們使用到哪個類,這個類纔會被加載到內存中。沒有使用時是絕對不會加載到內存中的。

7.import的使用場景(什麼時候使用import語句?)
(1) 相互訪問的兩個類不是在同一個包下面,這時候就需要使用到導包語句。

(2) java.lang 是默認導入 的,不需要我們自己導入







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