javax包背后的原理是什么?什么进入Java,什么进入Javax?
我知道javax中有很多enterprise-y软件包,但Swing,新的日期和时间api(JSR-310)和其他J2SE软件包也是如此。
JavaServlet
,Java3D
)。大多数可选软件包都植根于javax.*
名称空间中,尽管可能会有例外。
javax包背后的原理是什么?什么进入Java,什么进入Javax?
我知道javax中有很多enterprise-y软件包,但Swing,新的日期和时间api(JSR-310)和其他J2SE软件包也是如此。
JavaServlet
,Java3D
)。大多数可选软件包都植根于javax.*
名称空间中,尽管可能会有例外。
Answers:
我认为这是历史性的事情-如果在现有JRE的基础上引入了一个软件包,它将作为javax
。如果它是作为JRE的一部分首次引入的(我相信就像NIO一样),那么它将作为引入java
。不确定为什么新的日期和时间API最终会javax
遵循此逻辑……除非它也可以作为与早期版本一起使用的库单独提供(这很有用)。请注意多年之后:java
毕竟它最终还是存在的。
我相信对java
程序包有限制-我认为将类加载器设置为仅允许java.*
从中加载类rt.jar
或类似的东西。(肯定有一个检查ClassLoader.preDefineClass
。)
编辑:虽然官方解释(搜索的orbfish建议在第一页左右没有给出结果)毫无疑问是关于“核心”还是“扩展”,但我仍然怀疑,在许多情况下,对任何特定软件包的决定都有其背后的历史原因也是如此。是java.beans
真的“核心”到Java,例如?
java.time
毕竟,新的日期和时间API实际上将最终终止。
最初javax
是为了扩展而设计的,有时会将其提升javax
为Java。
一个问题是Netscape(可能还有IE)限制了Java包中可能存在的类。
当Swing设置为“研究生”时java
,javax
发生了一次小小的爆炸,因为人们意识到他们将不得不修改其所有进口商品。鉴于向后兼容性是Java的主要目标之一,因此他们改变了主意。
在那个时候,至少对于社区(也许不是对Sun)来说,整个过程javax
都失去了。因此,现在我们在javax中有了一些可能应该在其中的东西,java
但是除了那些选择软件包名称的人之外,我不知道是否有人可以根据具体情况弄清楚到底是什么。
java
包是base,javax
包是扩展。
Swing是扩展,因为AWT是原始的UI API。Swing随后出现在1.1版中。
java.time
:docs.oracle.com/javase/8/docs/api/java/time/...
javax命名空间通常(是一个已加载的词)用于标准扩展,当前称为可选包。标准扩展是非核心API的子集;非核心API的其他部分显然称为非标准扩展,占据了com.sun。*或com.ibm之类的名称空间。。核心API占用了Java。命名空间。
并非Java API世界中的所有事物都是从核心开始的,这就是为什么扩展通常是源于JSR请求的原因。他们最终基于“明智的顾问”而晋升为核心。
对这种命名法的兴趣来自于Sun的虚假行为-扩展本来可以升级为核心,即从javax。*移至java。*,从而打破了向后兼容的承诺。程序员哭得很嘶哑,更好的感觉占了上风。因此,Swing API虽然是核心的一部分,但仍然保留在javax。*名称空间中。这也是将软件包从扩展升级为核心的方式-它们只是作为JDK和JRE的一部分而可供下载。
java。*软件包是Java语言的核心软件包,这意味着使用Java语言的程序员必须使用它们才能对Java语言进行任何有价值的使用。
javax。*软件包是可选软件包,它提供了一种标准的,可扩展的方法,使自定义API可用于Java平台上运行的所有应用程序。
java.time
现在下载