javax vs Java包


385

javax包背后的原理是什么?什么进入Java,什么进入Javax?

我知道javax中有很多enterprise-y软件包,但Swing,新的日期和时间api(JSR-310)和其他J2SE软件包也是如此。



可选软件包是开放式标准API的实现(可选软件包的示例JavaServletJava3D)。大多数可选软件包都植根于javax.*名称空间中,尽管可能会有例外。
幸运

Answers:


212

我认为这是历史性的事情-如果在现有JRE的基础上引入了一个软件包,它将作为javax。如果它是作为JRE的一部分首次引入的(我相信就像NIO一样),那么它将作为引入java。不确定为什么新的日期和时间API最终会javax遵循此逻辑……除非它也可以作为与早期版本一起使用的库单独提供(这很有用)。请注意多年之后:java毕竟它最终还是存在的。

我相信对java程序包有限制-我认为将类加载器设置为允许java.*从中加载类rt.jar或类似的东西。(肯定有一个检查ClassLoader.preDefineClass。)

编辑:虽然官方解释(搜索的orbfish建议在第一页左右没有给出结果)毫无疑问是关于“核心”还是“扩展”,但我仍然怀疑,在许多情况下,对任何特定软件包的决定都有其背后的历史原因也是如此。是java.beans真的“核心”到Java,例如?


7
因为对于读者来说,按下alt-t并键入它比使用iPad剪切和粘贴要容易得多?;)。没错,不过,我我的意思是download.oracle.com/javase/tutorial/ext/index.html。顺便说一句,顺便说一句,我通常觉得您的答案有用,我很惊讶这个答案被接受了。
orbfish

1
在此注释主题前面建议的链接中的任何地方都没有出现“ javax”一词。
2014年

java.time毕竟,新的日期和时间API实际上将最终终止。
Michael Piefel

234

最初javax是为了扩展而设计的,有时会将其提升javax为Java。

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

当Swing设置为“研究生”时javajavax发生了一次小小的爆炸,因为人们意识到他们将不得不修改其所有进口商品。鉴于向后兼容性是Java的主要目标之一,因此他们改变了主意。

在那个时候,至少对于社区(也许不是对Sun)来说,整个过程javax都失去了。因此,现在我们在javax中有了一些可能应该在其中的东西,java但是除了那些选择软件包名称的人之外,我不知道是否有人可以根据具体情况弄清楚到底是什么。


12
“当Swing从Javax设置为从Javax到Java的“研究生”时,出现了一些小小的爆炸,因为人们意识到他们必须随后必须修改所有的导入内容。” 人们抱怨正则表达式可以实现某些事情,这是因为他们使用了生产前质量代码吗?
雪橇

10
对。在Sun决定将其保留在javax包中之前,我在Visual Cafe中编写了一个工具来在两者(javax和java)之间进行转换。
TofuBeer 2011年

51

java包是basejavax包是扩展。

Swing是扩展,因为AWT是原始的UI API。Swing随后出现在1.1版中。


摇摆不属于1.1。有一个版本的Swing作为库运行在1.1上。
Tom Hawtin-大头钉

这里有密钥-“库”,而不是JDK的一部分。版本是否错误?我的javadocs建议JButton从1.3开始,所以也许我的记忆失败了。
duffymo

1
那么,为什么javax..date和time中的新日期和时间API不是“ base”?
Pacerier,2011年

1
“ ...新的日期和时间api(JSR-310)...”-Oracle / Sun的某人认为最好将它放在javax中,因为它是核心库的较新扩展。如果您不同意,最好和他们一起解决。
duffymo 2011年

仅供参考:他们恢复了这一决定,和JSR-310被划归java.timedocs.oracle.com/javase/8/docs/api/java/time/...
马克Rotteveel

37

javax命名空间通常(是一个已加载的词)用于标准扩展,当前称为可选包。标准扩展是非核心API的子集;非核心API的其他部分显然称为非标准扩展,占据了com.sun。*或com.ibm之类的名称空间。。核心API占用了Java。命名空间。

并非Java API世界中的所有事物都是从核心开始的,这就是为什么扩展通常是源于JSR请求的原因。他们最终基于“明智的顾问”而晋升为核心。

对这种命名法的兴趣来自于Sun的虚假行为-扩展本来可以升级为核心,即从javax。*移至java。*,从而打破了向后兼容的承诺。程序员哭得很嘶哑,更好的感觉占了上风。因此,Swing API虽然是核心的一部分,但仍然保留在javax。*名称空间中。这也是将软件包从扩展升级为核心的方式-它们只是作为JDK和JRE的一部分而可供下载。


2

Javax过去仅用于扩展。但是后来sun将它添加到Java库中,却忘记删除x。开发人员开始使用javax编写代码。然而后来,Sun决定将其更改为Java。开发人员不喜欢这个主意,因为它们的代码会毁了……所以保留了javax。


1

java。*软件包是Java语言的核心软件包,这意味着使用Java语言的程序员必须使用它们才能对Java语言进行任何有价值的使用。

javax。*软件包是可选软件包,它提供了一种标准的,可扩展的方法,使自定义API可用于Java平台上运行的所有应用程序。


0

一些像 javax.swing最初,Java标准库中未包含。Sun公司决定将它们视为正式文件,并将它们作为标准库或标准扩展包含在Java的早期版本中。

按照惯例,所有标准扩展都以一段X时间开始,随着时间的推移它们可以被提升为一流javax.swing

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.