Java 命名空間的由來和引入


名字可視性(Name visibility)


名字管理對任何程序設計語言來說,都是一個重要問題。如果你在程序的某個模塊里使用了
一個名字,而其他人在這個程序的另一個模塊里也使用了相同的名字,那么怎樣才能區分這
兩個名字並防止二者互相沖突呢?這個問題在 C 語言中尤其嚴重,因為程序往往包含許多
難以管理的名字。C++類( Java 類基於此)將函數包於其內,從而避免了與其它類中的函數名
沖突。然而,C++仍允許全局數據和全局函數的存在,所以還是有可能發生沖突。為了解決
這個問題,C++通過幾個關鍵字,引入了“名字空間”的概念。
 
Java 采用了一種全新的方法,能夠避免上述所有問題。為了給一個類庫生成不會與其它名字
混淆的名字,Java 采用了與 Internet域名相似的指定符。實際上,Java設計者希望程序員反
過來使用自己的 Internet域名,因為這樣可以保證它們肯定是獨一無二的。由於我的域名是
BruceEckel.com ,所以我的各種奇奇怪怪的應用工具類庫就被命名為
com.bruceeckel.utility.foibles。反轉域名后,句點就用來代表子目錄的划分。

設計者們發現這樣
做會引起一些問題,因此,現在整個包名都是小寫了
 
Java2 的這種機制意味着所有的文件都能夠自動存活於它們自己的名字空間內,而且同一個
文件內的每個類都有唯一的標識符。所以不必學習特殊的語言知識來解決這個問題——Java
語言本身已經為你解決了這個問題。

 

根據反轉域名得到相應的命名空間的靈感大笑

 

運用其它構件

 

如果你想在自己的程序里使用預先定義好的類,那么編譯器就必須知道怎么定位它們。當然,
這個類可能就在發出調用的那個源文件中;在這種情況下,你就可以直接使用這個類——即
使這個類在文件的后面才會被定義(Java 消除了“向前引用”問題,故不必考慮它)。
 
如果那個類位於其它文件中,又會怎樣呢?你可能會認為編譯器應該有足夠的智慧,能夠直

接找到它的位置。但事實並非如此。想象下面的情況,如果你想使用一個特定名字的類,但
其定義卻不止一份(假設這些定義各不相同)。更糟糕的是,假設你正在寫一個程序,在構
建過程中,你想將某個新類添加到類庫中,但卻與已有的某個類名沖突。
 
為了解決這個問題,你必須消除所有可能的混淆情況。為實現這個目的,你可以使用關鍵字
import 來准確地告訴編譯器你想要的類是什么。Import 指示編譯器導入一個包,也就是一
個類庫(在其它語言中,一個庫不僅包含類,還可能包括方法和數據;但是 Java 中的所有的
代碼都必須寫在類里)。
 
大多時候,我們使用與編譯器附在一起的 Java 標准類庫里的構件。有了這些構件,你就不
必寫一長串的反轉域名。舉例來說,只須像下面這么書寫就行了:
 
import java.util.ArrayList;
 
這行代碼告訴編譯器,你想使用 Java 的 ArrayList類。但是,util 包含了數量眾多的類,有
時你想使用其中的幾個,同時又不想明確地逐一聲明。那么你可以使用通配符“*”來很容
易地實現這個目的:
 
      import java.util.*;

用這種方法一次導入一群類的方式倒是比一個一個地導入類的方式更常用。

 

參考出處:http://blog.csdn.net/wjmsmc/article/details/7860817


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM