javax包背后的理由是什么?什么进入java和什么进入javax?
我知道很多企业-y包都在javax中,但是Swing,新的日期和时间api(JSR-310)以及其他J2SE包也是如此.
最初javax本来是用于扩展,有时候事情会从javax升级到java.
一个问题是Netscape(可能还有IE)限制了可能在java包中的类.
当Swing被设置为从javax"毕业"到java时,有一种小小的爆炸,因为人们意识到他们必须修改他们的所有进口.鉴于向后兼容性是Java的主要目标之一,他们改变了主意.
在那个时间点,至少对于社区(可能不是对于Sun而言),javax的全部内容都已丢失.所以现在我们在javax中有一些东西可能应该在java中......但除了选择包名的人之外,我不知道是否有人可以根据具体情况弄清楚原理是什么.
我认为这是一个历史性的事情 - 如果一个软件包是作为现有JRE的补充而引入的,那么它就是javax
.如果它是作为JRE的一部分首次引入的(就像NIO那样,我相信)那么它就像是java
.不知道为什么新的日期和时间API最终会javax
遵循这个逻辑......除非它也可以单独作为库使用以使用早期版本(这将是有用的).许多年后的注意事项:它实际上终于进入java
了.
我相信java
包有一些限制- 我认为类加载器被设置为只允许java.*
加载类rt.jar
或类似的类.(当然有办理入住手续ClassLoader.preDefineClass
.)
编辑:虽然官方解释(搜索orbfish建议在第一页左右没有产生一个)毫无疑问是"核心"与"扩展",我仍然怀疑在许多情况下,任何特定包的决定都有背后的历史原因.是java.beans
真的"核心"到Java,例如?
java包是"基础",javax包是扩展.
Swing是一个扩展,因为AWT是最初的UI API.之后,版本1.1中出现了Swing.
javax命名空间通常(这是一个加载的单词)用于标准扩展,目前称为可选包.标准扩展是非核心API的子集; 非核心API的另一部分显然称为非标准扩展,占用com.sun.*或com.ibm等命名空间..核心API占用了java.命名空间.
并非Java API世界中的所有内容都以核心开头,这就是扩展通常源于JSR请求的原因.他们最终根据"明智的建议"晋升为核心.
对这个命名法的兴趣来自于Sun的一个失礼 - 扩展可能已被提升为核心,即从javax.*转移到java.*打破了向后兼容性承诺.程序员声音嘶哑,更好的感觉占了上风.这就是为什么Swing API虽然是核心的一部分,仍然继续保留在javax.*命名空间中.这也是如何将包从扩展提升到核心 - 它们只是作为JDK和JRE的一部分提供下载.