javax包背后的基本原理是什么?什么是java,什么是javax?我知道很多企业级的包都是用javax编写的,但Swing、新的日期和时间API(JSR-310)和其他J2 SE包也是。
svujldwt1#
最初,javax是用于扩展的,有时会将javax中的内容提升到java中。一个问题是Netscape(可能还有IE)限制了Java包中的类。当Swing被设置为从javax“graduate”到java时,出现了一种小爆炸,因为人们意识到他们必须修改所有的导入。考虑到向后兼容性是Java的主要目标之一,他们改变了主意。在那个时候,至少对于社区(可能不是Sun)来说,javax的全部意义都消失了。所以现在我们在javax中有一些东西可能应该在java中...但除了选择软件包名称的人之外,我不知道是否有人能根据具体情况找出理由。
javax
java
xkftehaa2#
我认为这是一个历史性的问题--如果一个包作为现有JRE的附加包引入,它将以javax的形式出现。如果它最初是作为JRE的一部分引入的(我相信就像NIO一样),那么它就是java。不知道为什么新的日期和时间API将最终作为javax遵循这个逻辑虽然...除非它也将作为一个库单独提供,以与早期版本一起工作(这将是有用的)。多年后的笔记:it(日期和时间API)实际上最终还是在java中。我相信java包上有限制-我认为classloader被设置为 * 只 * 允许java.*中的类从rt.jar或类似的东西加载。(ClassLoader.preDefineClass中肯定有一个检查。编辑:虽然官方的解释(搜索orbfish建议在第一页左右没有产生一个)是毫无疑问的“核心”与“扩展”,我仍然怀疑在许多情况下,任何特定软件包的决定背后也有一个历史原因。例如,java.beans真的是Java的“核心”吗?
java.*
rt.jar
ClassLoader.preDefineClass
java.beans
tmb3ates3#
java包是base,javax包是扩展。Swing是一个扩展,因为AWT是原始的UI API。Swing是后来的1.1版本。
piok6c0g4#
javax名称空间通常用于标准扩展,目前称为optional packages。标准扩展是非核心API的子集;非核心API的另一部分显然称为非标准扩展,占用了com. sun. * 或com.ibm. * 这样的名称空间。核心API占用java.* 命名空间。在Java API世界中,并不是所有的东西都是从核心开始的,这就是为什么扩展通常是从JSR请求中产生的。他们最终被提升为核心基于“明智的建议”。对这种命名法的兴趣来自于Sun的一个错误--扩展本可以被提升到核心,即。从javax.* 移动到java.,打破了向后兼容性的承诺。程序员们声嘶力竭地呼喊,理智占了上风。这就是为什么API虽然是核心的一部分,但仍然保留在javax. 名称空间中。这也是包从扩展升级到核心的方式--它们只是作为JDK和JRE的一部分提供下载。
yzckvree5#
java.* 包是核心的Java语言包,这意味着使用Java语言的程序员必须使用它们才能使用任何有价值的Java语言。javax.* 包是可选包,它提供了一种标准的、可伸缩的方式,使自定义API可用于Java平台上运行的所有应用程序。
uqjltbpv6#
Javax过去只用于扩展。但是后来sun把它添加到了java库中,忘记去掉x了。开发人员开始用javax编写代码。然而后来太阳决定将其改为java。开发人员不喜欢这个想法,因为他们的代码会被破坏…所以保留了javax。
gcuhipw97#
一些像javax.swing这样的包最初并没有包含在java标准库中。Sun公司决定将它们视为官方的,并将它们作为标准库或标准扩展包含到java的早期版本中。按照惯例,所有标准扩展都以X开始,而随着时间的推移,它们可以像javax.swing一样升级为一流扩展。
javax.swing
X
cfh9epnr8#
所有的javax包都是实验性的。当Swing足够稳定并准备好被转移到java包时,那里有太多的代码,他们决定保持它的向后兼容性。这在Laura Lemay和Rogers Candedhead撰写的《Learn Java in 21 days from the Sams editorial》一书中有解释。
8条答案
按热度按时间svujldwt1#
最初,
javax
是用于扩展的,有时会将javax
中的内容提升到java中。一个问题是Netscape(可能还有IE)限制了Java包中的类。
当Swing被设置为从
javax
“graduate”到java
时,出现了一种小爆炸,因为人们意识到他们必须修改所有的导入。考虑到向后兼容性是Java的主要目标之一,他们改变了主意。在那个时候,至少对于社区(可能不是Sun)来说,
javax
的全部意义都消失了。所以现在我们在javax中有一些东西可能应该在java
中...但除了选择软件包名称的人之外,我不知道是否有人能根据具体情况找出理由。xkftehaa2#
我认为这是一个历史性的问题--如果一个包作为现有JRE的附加包引入,它将以
javax
的形式出现。如果它最初是作为JRE的一部分引入的(我相信就像NIO一样),那么它就是java
。不知道为什么新的日期和时间API将最终作为javax
遵循这个逻辑虽然...除非它也将作为一个库单独提供,以与早期版本一起工作(这将是有用的)。多年后的笔记:it(日期和时间API)实际上最终还是在java
中。我相信
java
包上有限制-我认为classloader被设置为 * 只 * 允许java.*
中的类从rt.jar
或类似的东西加载。(ClassLoader.preDefineClass
中肯定有一个检查。编辑:虽然官方的解释(搜索orbfish建议在第一页左右没有产生一个)是毫无疑问的“核心”与“扩展”,我仍然怀疑在许多情况下,任何特定软件包的决定背后也有一个历史原因。例如,
java.beans
真的是Java的“核心”吗?tmb3ates3#
java
包是base,javax
包是扩展。Swing是一个扩展,因为AWT是原始的UI API。Swing是后来的1.1版本。
piok6c0g4#
javax名称空间通常用于标准扩展,目前称为optional packages。标准扩展是非核心API的子集;非核心API的另一部分显然称为非标准扩展,占用了com. sun. * 或com.ibm. * 这样的名称空间。核心API占用java.* 命名空间。
在Java API世界中,并不是所有的东西都是从核心开始的,这就是为什么扩展通常是从JSR请求中产生的。他们最终被提升为核心基于“明智的建议”。
对这种命名法的兴趣来自于Sun的一个错误--扩展本可以被提升到核心,即。从javax.* 移动到java.,打破了向后兼容性的承诺。程序员们声嘶力竭地呼喊,理智占了上风。这就是为什么API虽然是核心的一部分,但仍然保留在javax. 名称空间中。这也是包从扩展升级到核心的方式--它们只是作为JDK和JRE的一部分提供下载。
yzckvree5#
java.* 包是核心的Java语言包,这意味着使用Java语言的程序员必须使用它们才能使用任何有价值的Java语言。
javax.* 包是可选包,它提供了一种标准的、可伸缩的方式,使自定义API可用于Java平台上运行的所有应用程序。
uqjltbpv6#
Javax过去只用于扩展。但是后来sun把它添加到了java库中,忘记去掉x了。开发人员开始用javax编写代码。然而后来太阳决定将其改为java。开发人员不喜欢这个想法,因为他们的代码会被破坏…所以保留了javax。
gcuhipw97#
一些像
javax.swing
这样的包最初并没有包含在java标准库中。Sun公司决定将它们视为官方的,并将它们作为标准库或标准扩展包含到java的早期版本中。按照惯例,所有标准扩展都以
X
开始,而随着时间的推移,它们可以像javax.swing
一样升级为一流扩展。cfh9epnr8#
所有的javax包都是实验性的。当Swing足够稳定并准备好被转移到java包时,那里有太多的代码,他们决定保持它的向后兼容性。这在Laura Lemay和Rogers Candedhead撰写的《Learn Java in 21 days from the Sams editorial》一书中有解释。