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 程序集?的主要内容,如果未能解决你的问题,请参考以下文章