2023-09-28 09:00:05

Javax vs Java包

javax包背后的基本原理是什么?java和javax都包含哪些内容?

我知道很多企业级包都在javax中,Swing、新的日期和时间api (JSR-310)和其他J2SE包也在javax中。


当前回答

I think it's a historical thing - if a package is introduced as an addition to an existing JRE, it comes in as javax. If it's first introduced as part of a JRE (like NIO was, I believe) then it comes in as java. Not sure why the new date and time API will end up as javax following this logic though... unless it will also be available separately as a library to work with earlier versions (which would be useful). Note from many years later: it (date and time API) actually ended up being in java after all.

我相信java包是有限制的——我认为类加载器被设置为只允许java中的类。*从rt.jar或类似的东西加载。(当然在ClassLoader.preDefineClass中有一个检查。)

编辑:虽然官方的解释(orbfish的搜索并没有在第一页左右找到一个)毫无疑问是关于“核心”和“扩展”的,但我仍然怀疑在许多情况下,任何特定软件包的决定背后也有历史原因。是java。bean真的是Java的“核心”吗?

其他回答

java。*包是Java语言的核心包,这意味着使用Java语言的程序员必须使用它们,以便使Java语言有任何使用价值。

javax。*包是可选包,它提供了一种标准的、可伸缩的方式,使所有运行在Java平台上的应用程序都可以使用自定义api。

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

在Java API世界中,并不是所有的东西都是从核心开始的,这就是为什么扩展通常诞生于JSR请求的原因。根据“明智的建议”,他们最终会被提升到核心位置。

对这个命名法的兴趣来自于Sun的一个失礼之处——扩展本可以被提升到核心,即从javax迁移。*到java。*打破向后兼容的承诺。程序员们哭得声嘶力竭,理智占上风。这就是为什么Swing API虽然是核心的一部分,但仍然保留在javax中。*名称空间。这也是包从扩展升级到核心的方式——它们只是作为JDK和JRE的一部分提供下载。

最初javax是用于扩展的,有时一些东西会从javax提升到java。

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

当Swing被设置为从javax“毕业”到java时,出现了一些小问题,因为人们意识到他们必须修改所有的导入。考虑到向后兼容性是Java的主要目标之一,他们改变了主意。

在那个时候,至少对社区(也许对Sun不是)来说,javax的全部意义都消失了。所以现在我们在javax中有了一些可能应该在java中出现的东西……但除了选择套餐名称的人之外,我不知道是否有人能根据具体情况找出其中的基本原理。

一些包,如javax。Swing最初并没有包含在Java标准库中。Sun公司决定将它们视为官方的,并将它们作为标准库或标准扩展包含到java的早期版本中。

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

所有的javax包都是实验性的包。当Swing足够稳定并准备转移到java包时,那里有太多的代码,他们决定保留它,以保持向后兼容性的承诺。这在Laura Lemay和Rogers Candedhead撰写的Sams社论《Learn Java in 21 days》一书中有解释。