javax vs java包

时间:2009-04-07 22:28:41

标签: java

javax包背后的理由是什么?什么进入java和什么进入javax?

我知道很多企业-y包都在javax中,但是Swing,新的日期和时间api(JSR-310)以及其他J2SE包也是如此。

7 个答案:

答案 0 :(得分:218)

最初javax旨在用于扩展,有时会将javax内的内容提​​升为java。

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

当Swing从java设置为“毕业”到javax时,有一种小小的爆炸,因为人们意识到他们必须修改所有的进口。鉴于向后兼容性是Java的主要目标之一,他们改变了主意。

在那个时间点,至少对于社区(可能不是对于Sun)来说,javax的全部内容都已丢失。所以现在我们在javax中有一些东西可能应该在java ...但是除了选择包名的人之外我不知道是否有人能弄明白案例的基本原理是什么 - 基础。

答案 1 :(得分:187)

我认为这是历史性的事情 - 如果引入一个包作为现有JRE的补充,它就会以javax的形式出现。如果它首先作为JRE的 part 引入(我相信NIO就是这样),那么它会以java的形式出现。不知道为什么新的日期和时间API会以javax结束这个逻辑但是......除非它也可以单独作为库使用以使用早期版本(这将是有用的)。 多年后的注意事项:它实际上最终落入java

我认为java包有限制 - 我认为类加载器设置为允许java.*中的类从rt.jar加载或相似的东西。 (肯定有ClassLoader.preDefineClass的支票。)

编辑:虽然官方解释(搜索orbfish建议在第一页左右没有产生一个)毫无疑问是“核心”与“扩展”,但我仍然怀疑在许多情况下,任何特定的决定包装背后也有历史原因。例如,java.beans真的是Java的“核心”吗?

答案 2 :(得分:49)

java个包 base javax个包是扩展名。

Swing是一个扩展,因为AWT是最初的UI API。之后,版本1.1中出现了Swing。

答案 3 :(得分:35)

javax命名空间通常是(这是一个加载的单词),用于标准扩展,目前称为optional packages。标准扩展是非核心API的子集;非核心API的另一部分显然称为非标准扩展,占用com.sun。*或com.ibm。等命名空间。核心API占用了java。名称空间。

并非Java API世界中的所有内容都从核心开始,这就是扩展通常源于JSR请求的原因。他们最终根据“明智的建议”晋升为核心。

对这种术语的兴趣来自于Sun的一个失礼 - 扩展本可以提升为核心,即从javax。*转移到java。*打破向后兼容性承诺。程序员声音嘶哑,更好的感觉占了上风。这就是为什么Swing API虽然是核心的一部分,仍然继续保留在javax。*命名空间中。这也是如何将包从扩展提升到核心 - 它们只是作为JDK和JRE的一部分提供下载。

答案 4 :(得分:1)

java。*包是核心Java语言包,这意味着使用Java语言的程序员必须使用它们才能使用java语言。

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

答案 5 :(得分:1)

Javax过去只用于扩展。然后太阳将它添加到java libary忘记删除x。开发人员开始使用javax编写代码。然后,太阳队决定将其改为java。开发人员不喜欢这个想法,因为他们的代码会被破坏......所以保留了javax。

答案 6 :(得分:0)

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

按照惯例,所有标准扩展名都以X开头,而随着时间的推移,它们可以像javax.swing一样升为一流。