名字可視性(Name visibility) java
名字管理對任何程序設計語言來講,都是一個重要問題。若是你在程序的某個模塊裏使用了
一個名字,而其餘人在這個程序的另外一個模塊裏也使用了相同的名字,那麼怎樣才能區分這
兩個名字並防止兩者互相沖突呢?這個問題在 C 語言中尤爲嚴重,由於程序每每包含許多
難以管理的名字。C++類( Java 類基於此)將函數包於其內,從而避免了與其它類中的函數名
衝突。然而,C++仍容許全局數據和全局函數的存在,因此仍是有可能發生衝突。爲了解決
這個問題,C++經過幾個關鍵字,引入了「名字空間」的概念。
Java 採用了一種全新的方法,可以避免上述全部問題。爲了給一個類庫生成不會與其它名字
混淆的名字,Java 採用了與 Internet域名類似的指定符。實際上,Java設計者但願程序員反
過來使用本身的 Internet域名,由於這樣能夠保證它們確定是獨一無二的。因爲個人域名是
BruceEckel.com ,因此個人各類奇奇怪怪的應用工具類庫就被命名爲
com.bruceeckel.utility.foibles。反轉域名後,句點就用來表明子目錄的劃分。程序員
設計者們發現這樣
作會引發一些問題,所以,如今整個包名都是小寫了。
Java2 的這種機制意味着全部的文件都可以自動存活於它們本身的名字空間內,並且同一個
文件內的每一個類都有惟一的標識符。因此沒必要學習特殊的語言知識來解決這個問題——Java
語言自己已經爲你解決了這個問題。函數
根據反轉域名獲得相應的命名空間的靈感工具
運用其它構件學習
若是你想在本身的程序裏使用預先定義好的類,那麼編譯器就必須知道怎麼定位它們。固然,
這個類可能就在發出調用的那個源文件中;在這種狀況下,你就能夠直接使用這個類——即
使這個類在文件的後面纔會被定義(Java 消除了「向前引用」問題,故沒必要考慮它)。
若是那個類位於其它文件中,又會怎樣呢?你可能會認爲編譯器應該有足夠的智慧,可以直spa
接找到它的位置。但事實並不是如此。想象下面的狀況,若是你想使用一個特定名字的類,但
其定義卻不止一份(假設這些定義各不相同)。更糟糕的是,假設你正在寫一個程序,在構
建過程當中,你想將某個新類添加到類庫中,但卻與已有的某個類名衝突。
爲了解決這個問題,你必須消除全部可能的混淆狀況。爲實現這個目的,你可使用關鍵字
import 來準確地告訴編譯器你想要的類是什麼。Import 指示編譯器導入一個包,也就是一
個類庫(在其它語言中,一個庫不只包含類,還可能包括方法和數據;可是 Java 中的全部的
代碼都必須寫在類裏)。
大多時候,咱們使用與編譯器附在一塊兒的 Java 標準類庫裏的構件。有了這些構件,你就不
必寫一長串的反轉域名。舉例來講,只須像下面這麼書寫就好了:
import java.util.ArrayList;
這行代碼告訴編譯器,你想使用 Java 的 ArrayList類。可是,util 包含了數量衆多的類,有
時你想使用其中的幾個,同時又不想明確地逐一聲明。那麼你可使用通配符「*」來很容
易地實現這個目的:
import java.util.*;.net
用這種方法一次導入一羣類的方式卻是比一個一個地導入類的方式更經常使用。設計
參考出處:http://blog.csdn.net/wjmsmc/article/details/7860817blog