天天看點

JAVA - package與import解析(一)

一、為什麼要引入package和import?

這個問題和c++中引入命名空間是一樣的,也是為了解決重名問題。java通過包機制來解決重名問題,也就相當于給重名的代碼加一系列字首,進而達到唯一辨別的作用。

二、如何解決重名問題?

這個就有點像外國人的名字:如果我叫Jeason,我爸叫Kevin,我爺爺叫Bob,我爺爺的爸爸叫Peter。

那麼如果沒有人和我同名(Jeason),那麼Jeason這個名字就能夠唯一辨別我了;而如果還有一個人也叫Jeason,那麼我就加上我爸爸的名字Kevin,我就

是Kevin Jeason;如果那個人他爸爸也叫Kevin,那麼我再加上我爺爺的名字,我就叫Bob Devin Jeason;如果他爸爸和爺爺的名字又和我爸爸和爺爺的

名字相同,那麼我再加上我爺爺的爸爸的名字,我就叫Peter Bob Kevin Jeason ...

這樣一來就解決了重名問題。

三、具體用法

在桌面上建立了一個Cat.java,内容為:

當然這樣是可以正确編譯運作的。

現在我再在前面加一個package,将這段代碼打包一下:

編譯通過,但是在執行程式時提示“錯誤:找不到或無法加載主類 Cat”。

為什麼會出現這個問題呢?因為我們已經将Cat類打包,系統自然無法找到Cat類。

那現在我再在桌面上建立一個Dog.java,内容為:

在編譯時會顯示:無法找到Cat類,還是同樣的問題;我們已經将Cat.java類打包了。

那麼我們如何才能通路到Cat.java類呢?

其實,在java語言中,package是和檔案的目錄相對應的,我們在寫程式的時候要随時将代碼與檔案聯系在一起。

我們在封裝類的時候,一般有這樣一個預設的準則,即仿照域名的格式,将域名倒過來打包類。

既然我們打包了類,而package又是和檔案對應,那麼我們就建立檔案夾把它放進去就行,将.class檔案放在.com/crazyacking/github/檔案夾下即可。

JAVA - package與import解析(一)

代碼變為:

這樣就能通路到Cat類了。但是,每次通路Cat類的時候前面都要寫這麼一大堆東西,不僅寫着麻煩,看着也煩,這時候import就派上用場了。

當然也可以将com.crazyacking.github中的全部子類都包含進來:

注意:“.*”隻可以包含該檔案夾下的類,但并不包括該檔案下的子檔案夾下的類。

通過package和import就可以完美的解決重名問題了。

四、相關拓展

如果我們包的路徑太過于複雜而且該包被經常調用,我們還可以直接将包所在的檔案夾路徑直接加到環境變量的ClassPath下面。

這樣一來,系統會首先根據ClassPath進行資源查找,避免了每次調用都要包含的問題。

另:在使用import來包含類時,包含的源代碼可能對運作産生影響,可以将源代碼移除,隻留.class檔案就行。