JAR和包的区别是什么?

7
有没有JAR文件和包之间的区别?

1
你可以扩展一下你的问题吗?提供一些问题的背景信息吗? - Sergey Vedernikov
4个回答

18
一个包是一种逻辑上组织类的方式。例如,你可以在与com.foo相关的每个源文件的顶部声明package com.foo;,这些源文件足够相关,可以在同一个包中。Java编译器和运行时还希望你将这些文件放在路径com/foo/中,其中此路径的根目录是类路径中的目录或JAR文件。
JAR文件让你物理上组织你的类。你可以把任何Java文件(以及它们的父目录,遵循上述目录结构)存储在一个JAR文件中。一个JAR文件可能包含属于多个包的文件,多个JAR文件也可能包含属于同一个包的文件。因此,一个JAR文件主要是为了在单个物理文件中存储多个类文件。
JAR文件还有一些其他特殊的特性。例如,你可以在JAR清单中指定一个Main-Class值来指定应用程序的入口点是哪个类,并且你可以封装 JAR文件中的包,"这意味着定义在该包中的所有类都必须存档在同一个JAR文件中。"

5
通常情况下,你应该把类文件放进一个 jar 包里,而不是 Java 文件。 </吹毛求疵> - cHao
1
Java中包的强制使用原因是将其用作命名空间,以允许两个开发人员命名其类Hello,只要他们使用不同的包(或在同一应用程序中有两个类Parser)。 Java提供了命名包的规则(例如基于DNS约定),并且不鼓励使用默认(未命名)包以防止类名冲突。 - mins

6

包是Java中将类组织到命名空间的机制。JAR是Java ARchive的缩写,是一种文件格式,可以将多个Java类聚合成一个。


3
简而言之,JAR文件是一个物理文件,结构类似于zip文件,它包含在程序执行时使用的文件。一个jar通常包括.class文件,即您的类的可执行版本,以及其他资源,如图标、图片、语言特定的属性文件等。Java教程描述了jar文件,以及如何创建/管理它们。(http://java.sun.com/docs/books/tutorial/jar/index.html)
在Java教程中,接口和包的相关主题中定义了包:“一组相关类和接口,提供访问保护和命名空间管理。”(http://java.sun.com/docs/books/tutorial/java/interpack/)。虽然准确,但我觉得这个定义本身并没有给你一个很好的感觉,知道什么是一个包。要获取更多信息,请转到引用页面,并阅读该教程部分的内容。

-3
在类路径中,JAR文件和包(目录)具有相同的结构。只是相比于目录,JAR文件更适合在计算机之间移动。

这完全是错误的。一个包是类路径项内的目录结构,该类路径项可以是jar文件或目录,但包始终是jar/目录内的目录结构。 - Ajax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接