Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java包等同于.Net程序集吗?_Java_.net_Assemblies_Package - Fatal编程技术网

Java包等同于.Net程序集吗?

Java包等同于.Net程序集吗?,java,.net,assemblies,package,Java,.net,Assemblies,Package,我是一名为Android启动Java开发的.Net开发人员,我想知道像.Net程序集这样的Java包是否正确。不,我认为Java包更类似于名称空间 一个程序集更像一个jar(我对此不太确定,因为我对Java比.Net更熟悉……如果我错了,请纠正我)不 最好的比较是使用Java归档(Jar)文件。Java使用包来控制名称空间,与C的名称空间非常相似 下面是我如何比较环境的 Java .Net ==== ==== Class

我是一名为Android启动Java开发的.Net开发人员,我想知道像.Net程序集这样的Java包是否正确。

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

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

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

下面是我如何比较环境的

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

Java包类似于.NET中的命名空间


jar文件相当于Java中的程序集。

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


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

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

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

您可以在此处阅读有关java类加载的更多信息:

在这里:

有一个Zlich all阻止我通过创建新包向java.lang名称空间添加类。打破已检查异常的方法之一就是这样做(在编译时重写异常和RuntimeException)。@Joshua,只有将类放在它自己的jar中,才能将类添加到java.lang包中。它也只适用于添加的类。如果您试图替换Exception类,我不确定这是否可能,因为即使没有定义类路径,JRE也会加载它自己。@Joshua:我不确定您的意思,或者为什么您的评论会被提升。将类添加到java.lang“名称空间”(不确定名称空间的定义是什么)不需要“创建新包”;包不是一个实体,它是一个命名结构。@Joshua:但就恶意/有趣/巫毒而言,你可以用它来做,是的,我认为这是可能的,但不存在“全是废话”阻止您重写异常和RuntimeException…您必须为初学者重写引导类加载器。@马克:在运行时是这样,但编译器不知道这一点。我所遵循的特定过程只需要在编译时重写,而不需要在运行时重写。我要补充的是,.Net中的程序集比Java中的Jar具有更微妙的访问修饰符(至少我是这样理解的)。这个答案解释了这样一个细节: