2010-09-02 40 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

相关问题