2010-09-02 42 views

回答

50

最好的比較是用Java歸檔(JAR)文件。 Java使用包來控制名稱空間,並且與C#的名稱空間非常相似。

這裏是我會比較環境

Java     .Net 
====     ==== 
Class     Class 
Package     Namespace 
Jar      Assembly 
+1

我會補充說.Net中的程序集比Java中的Jar具有更微妙的訪問修飾符(至少,這就是我的理解)。這個答案解釋了一個這樣的細節:http://stackoverflow.com/a/9808237/1168342 – Fuhrmanator 2013-03-12 03:13:04

4

不,我覺得一個Java包會更類似於一個命名空間

和裝配會更像一個罐子(我不太確定這一點,因爲我更熟悉Java比淨...糾正我,如果我錯了)

+2

有小人物,都阻止我加入類java.lang的命名空間創建一個新包。打破檢查異常的方法之一就是要做到這一點(在編譯時重寫Exception&RuntimeException)。 – Joshua 2010-09-02 16:54:51

+0

+1您的回答反映維基http://en.wikipedia.org/wiki/Java_package – 2010-09-02 16:56:06

+0

@Joshua,只有將類放入自己的jar中,才能將類添加到java.lang包中。它也只適用於增加的類。如果您試圖替換Exception類,我不確定它是否可行,因爲即使沒有定義CLASSPATH,JRE也會自行加載它。 – 2010-09-02 16:58:56

1

Java包,就像是在.NET命名空間。

與Java中的程序集相當的是jar文件。

1

Java中的包通常意味着類和接口的名稱空間,這實際上意味着特定的目錄結構。有時.jar文件也被稱爲包。這可能是最接近組裝的。 .jar文件還可以包含其他數據,如圖像,或基本上是一種文件,因爲它只是一個具有特定內容結構的zip文件。

在任何情況下:通常,當您閱讀與「Java」有關的「包」時,某些類型的命名空間(通過文件夾結構,例如:com.mycompany.myproject)是指。它不會幫助某些構建工具將構建.jar文件的過程稱爲「打包」;-)

0

請記住,我遠離Java專家,但無論如何,對此:

正如其他答案所指出的,一個包不等同於一個Assembly。然而,我並不完全同意.jar等同於大會的想法。 對我來說,Java類(包含在.class文件中)比.jar更接近程序集。我說這個原因,而CLR的加載單元是Assembly(這意味着包含在該Assembly中的所有類都被加載),JVM的加載單元是一個類(當JVM需要一個類時,ClassLoader不會加載容器jar中的所有類,它只加載該特定的所需類)。

你可以閱讀更多關於Java類加載在這裏: When does the JVM load classes?

這裏: http://www.lansa.com/support/notes/p0294.htm

相關問題