javax vs java包
javax包的基本原理是什么? 什么进入java和什么到javax?
我知道javax中有很多enterprise-y包,但Swing,新的date和时间api(JSR-310)以及其他J2SE包也是如此。
我认为这是一个历史性的事情 – 如果一个软件包是作为现有JRE的补充而引入的,它将以javax
。 如果它是作为JRE的一部分首先引入的(就像NIO那样,我相信),那么它将以java
。 不知道为什么新的date和时间的API将最终作为javax
遵循这个逻辑,虽然…除非它也可以单独作为一个库来使用早期版本(这将是有用的)。 多年后注意到:毕竟它实际上是在java
结束的。
我相信有java
包的限制 – 我认为类加载器被设置为只允许在java.*
类从rt.jar
或类似的东西加载。 (在ClassLoader.preDefineClass
肯定有一个检查。)
编辑:虽然官方的解释(searchorbfishbuild议没有在第一页左右)是毫无疑问的“核心”与“扩展”,我仍然怀疑,在许多情况下,任何特定的软件包的决定有一个也是背后的历史原因。 例如, java.beans
真的是Java的核心吗?
最初的javax是为扩展而devise的,有时候会把事情从javax推广到java。
一个问题是Netscape(可能是IE)限制可能在java包中的类。
当Swing被设置为从javax“gradle”到java时,有一种微型炸弹,因为人们意识到他们将不得不修改所有的导入。 鉴于向后兼容性是Java的主要目标之一,他们改变了主意。
在那个时候,至less对于社区(也许不是Sun)来说,javax的全部内容都已经丢失了。 所以现在我们在javax中有一些可能应该在java中的东西…但除了select包名的人之外,我不知道是否有人可以根据具体情况找出理由是什么。
java包是“base”,而javax包是扩展。
Swing是一个扩展,因为AWT是最初的UI API。 之后Swing在1.1版本中出现。
javax命名空间通常 (这是一个加载的字)用于标准扩展,目前被称为可选包 。 标准扩展是非核心API的一个子集; 非核心API的另一部分显然称为非标准扩展,占用com.sun。*或com.ibm等命名空间。 。 核心API占用了Java。 命名空间。
并非Java API领域的所有内容都是从核心开始的,这就是为什么扩展通常是由JSR请求产生的原因。 基于“明智的build议”,他们最终被提升为核心。
对这个术语的兴趣来自于Sun的失误 – 扩展可能已经被提升为核心,即从javax。*移动到java。*打破了向后兼容的承诺。 程序员嘶哑地哭了起来,更好的感觉盛行。 这就是为什么,Swing API虽然是核心的一部分,但仍然保留在javax。*命名空间中。 这也是软件包如何从扩展到核心的提升 – 它们仅作为JDK和JRE的一部分提供下载。
Javax以前只是用于扩展。 然后后来sun把它添加到java libary忘记删除x。 开发人员开始用javax编写代码。 然而在太阳晚些时候,太阳队决定把它改成java。 开发人员不喜欢这个想法,因为他们的代码将被毁坏…所以javax被保留。
java。*包是Java语言的核心包,这意味着使用Java语言的程序员必须使用它们才能使用任何有价值的Java语言。
javax。*包是可选的包,它提供了一个标准的,可扩展的方法来使定制的API可用于在Java平台上运行的所有应用程序。