Javax vs Java包

javax包背后的基本原理是什么?java和javax都包含哪些内容?

我知道很多企业级包都在javax中,Swing、新的日期和时间api (JSR-310)和其他J2SE包也在javax中。

279751 次浏览

我认为这是一个历史问题——如果一个包是作为现有JRE的补充引入的,它会以javax的形式出现。如果它最初是作为JRE的部分引入的(就像NIO一样,我相信),那么它会作为java出现。不确定为什么新的日期和时间API将按照这个逻辑结束为javax…除非它也可以单独作为一个库使用早期版本(这很有用)。多年后的注意:它(日期和时间API)实际上最终在java中结束。

我相信在java包上有限制——我认为类加载器被设置为只有,允许从rt.jar或类似的东西加载java.*中的类。(在ClassLoader.preDefineClass中当然有一个检查。)

编辑:虽然官方的解释(根据orbfish的搜索,在第一页左右没有找到)毫无疑问是关于“核心”的;与“延期”相比,我仍然怀疑,在许多情况下,对任何特定一揽子计划的决定背后也有历史原因。java.beans真的是那个“核心”吗?比如Java ?

java包是基地,而javax包是扩展。

Swing是一个扩展,因为AWT是最初的UI API。Swing是在1.1版本之后出现的。

javax名称空间是用于标准扩展的通常(这是一个加载的词),目前称为可选包。标准扩展是非核心api的子集;非核心api的另一部分显然称为非标准扩展,占用了com.sun这样的命名空间。*或com.ibm。. 核心api占用了java。名称空间。

在Java API世界中,并不是所有的东西都是从核心开始的,这就是为什么扩展通常诞生于JSR请求的原因。根据“明智的建议”,他们最终会被提升到核心位置。

对这个命名法的兴趣来自于Sun的一个失礼之处——扩展本可以被提升到核心,即从javax迁移。*到java。*打破向后兼容的承诺。程序员们哭得声嘶力竭,理智占上风。这就是为什么Swing API虽然是核心的一部分,但仍然保留在javax中。*名称空间。这也是包从扩展升级到核心的方式——它们只是作为JDK和JRE的一部分提供下载。

最初javax是用于扩展的,有时一些东西会从javax提升到java。

一个问题是Netscape(可能还有IE)限制了可以在java包中的类。

当Swing被设置为从javax“毕业”到java时,出现了一些小问题,因为人们意识到他们必须修改所有的导入。考虑到向后兼容性是Java的主要目标之一,他们改变了主意。

在那个时候,至少对于社区(也许不是Sun)来说,javax的整个意义已经失去了。所以现在我们在javax中有一些东西可能应该在java中…但除了选择套餐名称的人之外,我不知道是否有人能根据具体情况找出其中的基本原理。

java。*包是Java语言的核心包,这意味着使用Java语言的程序员必须使用它们,以便使Java语言有任何使用价值。

javax。*包是可选包,它提供了一种标准的、可伸缩的方式,使所有运行在Java平台上的应用程序都可以使用自定义api。

Javax过去只用于扩展。但是后来sun将它添加到java库中,忘记了删除x。开发人员开始使用javax编写代码。但后来,太阳公司决定将其改为java。开发人员不喜欢这个想法,因为他们的代码会被毁……所以javax被保留了下来。

一些包,如javax.swing,一开始并没有包含在java标准库中。Sun公司决定将它们视为官方的,并将它们作为标准库或标准扩展包含到java的早期版本中。

按照惯例,所有标准扩展都以X开头,而它们可以随着时间的推移被提升为一级扩展,就像javax.swing那样。

所有javax包都是实验包。当Swing足够稳定并准备转移到java包时,那里有太多的代码,他们决定让它保持向后兼容性的承诺。这在Laura Lemay和Rogers Candedhead撰写的Sams社论《Learn Java in 21 days》一书中有解释。