不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦>知識大全>知識百科>百科知識>

java中命名空間是什么

時間: 歐東艷656 分享

  命名空間是用來組織和重用代碼的[1] 。如同名字一樣的意思,NameSpace(名字空間),之所以出來這樣一個東西,是因為人類可用的單詞數(shù)太少,并且不同的人寫的程序不可能所有的變量都沒有重名現(xiàn)象,對于庫來說,這個問題尤其嚴重,如果兩個人寫的庫文件中出現(xiàn)同名的變量或函數(shù)(不可避免),使用起來就有問題了,為了解決這個問題,引入了名字空間這個概念,通過使用 namespace xxx;你所使用的庫函數(shù)或變量就是在該名字空間中定義的,這樣一來就不會引起不必要的沖突了。

  名字管理對任何程序設計語言來說,都是一個重要問題。如果你在程序的某個模塊里使用了一個名字,而其他人在這個程序的另一個模塊里也使用了相同的名字,那么怎樣才能區(qū)分這兩個名字并防止二者互相沖突呢?這個問題在 C 語言中尤其嚴重,因為程序往往包含許多難以管理的名字。C++類( Java 類基于此)將函數(shù)包于其內(nèi),從而避免了與其它類中的函數(shù)名沖突。然而,C++仍允許全局數(shù)據(jù)和全局函數(shù)的存在,所以還是有可能發(fā)生沖突。為了解決這個問題,C++通過幾個關鍵字,引入了“名字空間”的概念。

  Java 采用了一種全新的方法,能夠避免上述所有問題。為了給一個類庫生成不會與其它名字混淆的名字,Java 采用了與 Internet域名相似的指定符。實際上,Java設計者希望程序員反過來使用自己的 Internet域名,因為這樣可以保證它們肯定是獨一無二的。由于我的域名是BruceEckel.com ,所以我的各種奇奇怪怪的應用工具類庫就被命名為com.bruceeckel.utility.foibles。反轉域名后,句點就用來代表子目錄的劃分。

  設計者們發(fā)現(xiàn)這樣

  做會引起一些問題,因此,現(xiàn)在整個包名都是小寫了。

  Java2 的這種機制意味著所有的文件都能夠自動存活于它們自己的名字空間內(nèi),而且同一個文件內(nèi)的每個類都有唯一的標識符。所以不必學習特殊的語言知識來解決這個問題——Java語言本身已經(jīng)為你解決了這個問題。

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

  運用其它構件

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

  如果那個類位于其它文件中,又會怎樣呢?你可能會認為編譯器應該有足夠的智慧,能夠直接找到它的位置。但事實并非如此。想象下面的情況,如果你想使用一個特定名字的類,但其定義卻不止一份(假設這些定義各不相同)。更糟糕的是,假設你正在寫一個程序,在構建過程中,你想將某個新類添加到類庫中,但卻與已有的某個類名沖突。

  為了解決這個問題,你必須消除所有可能的混淆情況。為實現(xiàn)這個目的,你可以使用關鍵字import 來準確地告訴編譯器你想要的類是什么。Import 指示編譯器導入一個包,也就是一個類庫(在其它語言中,一個庫不僅包含類,還可能包括方法和數(shù)據(jù);但是 Java 中的所有的代碼都必須寫在類里)。

  大多時候,我們使用與編譯器附在一起的 Java 標準類庫里的構件。有了這些構件,你就不必寫一長串的反轉域名。舉例來說,只須像下面這么書寫就行了:import java.util.ArrayList;

  這行代碼告訴編譯器,你想使用 Java 的 ArrayList類。但是,util 包含了數(shù)量眾多的類,有時你想使用其中的幾個,同時又不想明確地逐一聲明。那么你可以使用通配符“*”來很容

  易地實現(xiàn)這個目的:

  import java.util.*;

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

246207