javax包背后的理念是什么?哪些内容属于Java,哪些属于javax?
我知道很多企业级的包都在javax中,但Swing、新的日期和时间API(JSR-310)以及其他J2SE包也在其中。
javax包背后的理念是什么?哪些内容属于Java,哪些属于javax?
我知道很多企业级的包都在javax中,但Swing、新的日期和时间API(JSR-310)以及其他J2SE包也在其中。
最初 javax
是用于扩展的,有时会将某些东西从 javax
提升到 java。
一个问题是Netscape(以及可能是IE)限制了可以在java包中的类。
当Swing被设置为从 javax
"毕业" 到 java
时,出现了一些小波动,因为人们意识到他们必须修改所有的导入。鉴于向后兼容性是Java的主要目标之一,他们改变了想法。
那时,至少对于社区而言(也许对Sun不是这样),javax
的整个意义都失去了。所以现在我们有一些应该在 java
中的东西放在了 javax 中...但除了选择包名称的人之外,我不知道是否有人能够逐个案例地弄清楚其基本原理。
java.swing
和使用javax.swing
的代码将无法互操作。 - Solomon Uckojavax.swing.X
作为所有X
的虚拟类,继承自java.swing.X
。 - jgomo3我认为这是一个历史问题 - 如果一个包作为现有JRE的补充引入,它将以javax
的形式出现。如果它首次作为JRE的一部分引入(例如我认为NIO是这样的),那么它将以java
的形式出现。不确定为什么新的日期和时间API会按照这个逻辑最终以javax
的形式出现...除非它也可以作为库单独使用以与早期版本兼容(这将很有用)。 多年后的注释:它(日期和时间API)最终确实成为java
了。
我相信java
包存在限制 - 我认为类加载器被设置为只允许从rt.jar
或类似的地方加载java.*
内的类。(ClassLoader.preDefineClass
确实进行了检查。)
编辑:虽然正式说明(或bfish建议的搜索结果没有在前几页中得到说明)无疑是关于“核心”和“扩展”的,但我仍然怀疑在许多情况下,任何特定包的决定背后都有历史原因。例如,java.beans
真的对Java很“核心”吗?
java.time
。 - Michael PiefelJava
包是基础,而javax
包则是扩展。
Swing
是一个扩展,因为最初的UI API是AWT
。在版本1.1中随后推出了Swing
。
java.time
:http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html - Mark Rotteveeljavax 命名空间通常用于标准扩展,也就是目前被称为可选包的内容。标准扩展是非核心 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平台上运行的所有应用程序都可用。
Javax曾经只用于扩展。然而后来Sun将其添加到Java库中,却忘记删除x。开发人员开始使用javax编写代码。然而在后来的时间里,Sun决定将其改为Java。开发人员不喜欢这个想法,因为他们的代码会被破坏...所以javax被保留了下来。
一些包,比如javax.swing
,最初并没有包含在Java标准库中。Sun公司决定将它们作为官方包含到早期版本的Java中作为标准库或标准扩展。
按照惯例,所有标准扩展都以X
开头,随着时间的推移,它们可以被提升为一流,就像对于javax.swing
所发生的那样。
所有的javax包都是实验性的包。当Swing足够稳定并准备好移动到java包时,已经有了太多的代码,他们决定保持现状以遵守向后兼容的承诺。这在Sams编辑Laura Lemay和Rogers Candedhead编写的《21天学会Java》一书中有解释。