Java 包是不是等同于 .Net 程序集?

Posted

技术标签:

【中文标题】Java 包是不是等同于 .Net 程序集?【英文标题】:Is a Java package the equivalent of a .Net assembly?Java 包是否等同于 .Net 程序集? 【发布时间】:2011-04-07 10:56:32 【问题描述】:

我是一名 .Net 开发人员,开始为 android 开发 Java,想知道将 Java 包视为 .Net 程序集是否正确。

【问题讨论】:

【参考方案1】:

请记住,我远非 Java 专家,但无论如何,这就是我的看法:

正如其他答案所指出的,包不等同于程序集。但是,我并不完全同意 .jar 等同于 Assembly 的想法。 对我来说,Java 类(包含在 .class 文件中)比 .jar 更接近于 Assembly。我说这是因为 CLR 的加载单元是程序集(这意味着该程序集中包含的所有类都被加载),JVM 的加载单元是一个类(当 JVM 需要一个类时,ClassLoader 不需要加载容器 jar 中的所有类,它只加载特定需要的类)。

您可以在此处阅读有关 java 类加载的更多信息: When does the JVM load classes?

这里: http://www.lansa.com/support/notes/p0294.htm

【讨论】:

【参考方案2】:

Java 中的包通常意味着类和接口的命名空间,实际上意味着特定的目录结构。有时 .jar 文件也称为包。这可能是您最接近装配的地方。 .jar 文件还可以包含其他数据,例如图像,或者基本上是一种文件,因为它只是一个具有某些特定内容结构的 zip。

在任何情况下:通常当您阅读与“Java”相关的“包”时,意味着某种名称空间(通过文件夹结构,例如:com.mycompany.myproject)。一些构建工具将构建.jar文件的过程称为“打包”并没有帮助;-)

【讨论】:

【参考方案3】:

Java 包就像 .NET 中的命名空间。

在Java中相当于一个程序集的是jar文件。

【讨论】:

【参考方案4】:

没有。

最好的比较是使用 Java ARchive (Jar) 文件。 Java 使用包来控制命名空间,与 C# 的命名空间非常相似。

这是我比较环境的方式

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

【讨论】:

我要补充一点,.Net 中的程序集比 Java 中的 Jar 具有更微妙的访问修饰符(至少,我是这么理解的)。这个答案解释了一个这样的细节:***.com/a/9808237/1168342【参考方案5】:

不,我认为 Java 包更类似于命名空间

而且程序集更像是一个罐子(我对此不太确定,因为我对 Java 比对 .Net 更熟悉......如果我错了,请纠正我)

【讨论】:

Zilch-all 阻止我通过创建新包将类添加到 java.lang 命名空间。打破已检查异常的方法之一就是这样做(在编译时覆盖 Exception 和 RuntimeException)。 @Joshua,只有将类放入其自己的 jar 中,才能将类添加到 java.lang 包中。它也只适用于添加的类。如果您尝试替换 Exception 类,我不确定它是否可能,因为即使没有定义 CLASSPATH,JRE 也会自行加载。 @Joshua:我不确定你的意思,或者你的评论为什么被赞成。将类添加到 java.lang “命名空间”(不确定您的命名空间定义在这里)不需要“创建新包”。事实上,从 Java 的角度来看,“创建一个新包”甚至没有意义。包不是实体,而是命名结构。 @Joshua:但就恶意/有趣/巫毒的事情而言,你可以用它来做,是的,我认为这是可能的,但没有“zilch-all”阻止你覆盖 Exception 和 RuntimeException。 ..你必须为初学者覆盖引导类加载器。 @Mark:在运行时确实如此,但编译器不知道这一点。而且我所遵循的特定过程只需要在编译时覆盖,而不是运行时。

以上是关于Java 包是不是等同于 .Net 程序集?的主要内容,如果未能解决你的问题,请参考以下文章

程序集和反射(C#)

从内存而不是磁盘加载.NET程序集[关闭]

30天C#基础巩固----程序集,反射

ASP.NET 解决方案的本机程序集绑定失败

Newtonsoft.json 程序集包版本不匹配

C++(MFC,而不是 .NET)应用程序的程序集重定向