关于javax vs java包的一些基本问题

时间:2012-02-29 16:33:03

标签: java packages

当我去JavaDocs时,我在java包中找到了一些类,而有些类在javax中。然后我遇到了javax vs java package

我从这个链接得到什么 几乎所有答案都是javax包只是java库的扩展。我的意思是首先Java必须带有核心Java库I.E. java包,但是当更多包开发后,它们会以javax发布。对?

作为开发人员,我立即想到了一些问题。这些不同命名的包对Java开发人员有什么影响。以下是问题和分析: -

  1. 即使我同意javax只是核心java的扩展。但是我再次看到完全不同的包,例如org.omg.CORBA等。为什么这个被命名为javax.omg.CORBA
  2. javaxorg这样的软件包是否带有标准的JDK和JRE下载?这些是否需要与JSE 1.6分开下载?
  3. 默认情况下,bootstrap类加载器是否尝试在这些包中查找类,就像核心Java类(如java.lang)一样。

3 个答案:

答案 0 :(得分:4)

我认为这是相当武断的。正如Jon Skeet在回答你所链接的问题时说的那样,其中很多都是历史性的。一个很好的例子是javax.sql - 它包含与JDBC有关的类,这些类最初是J2EE的一部分,但是在1.4中引入了J2SE。所以现在java.sql和javax.sql之间存在着无意义的类拆分。 JDK中的java / javax拆分没有特别的含义。

  1. CORBA类就在它们的位置,因为它们不是由Java标准定义的;它们是CORBA规范中定义的接口的翻译。
  2. 标准的J2SE JDK / JRE(javax.sql,javax.xml)附带了很多javax。*包。还有javax。*包不包含(javax.inject,javax.servlet等)。但是没有JDK中没有的java。*包。
  3. 我相信bootstrap类加载器同样加载java。*和javax。*类。

答案 1 :(得分:2)

历史上,我们的想法是java。*包将随JDK一起提供,而javax。*包将是必须单独下载的包。在某种程度上它仍然以这种方式工作;所有java。*包都附带JDK,并且有许多javax。*包,比如servlet,必须单独下载。

当Sun决定将一些javax。*软件包(如Swing)移动到主JDK中时,一个猴子扳手被投入到这个方案中。他们实际上是要将包名从javax.swing更改为java.swing,但是当很明显这会破坏大量代码的向后兼容性时,他们决定将包移入,但保留javax。摇摆名称。所以这个名字不再是指示性的,而是出于历史原因。

如果org.omg和org.w3c软件包发生同样的事情(它们是第三方库被移入核心JDK并且名称无法更改),我不会感到惊讶。无论如何,如果它在JDK API文档中,您可以使用它而无需下载除主JDK之外的任何内容,并且类加载器会发现它很好。

答案 2 :(得分:1)

  1. 他们经常来自非Sun / Oracle的派对。例如。 http://omg.org/人员(显然)创建了org.omg包你看到包名和域名之间的联系吗?
  2. 不,如果它们在特定版本的J2SE JavaDocs中列出,则它们是该版本的标准。以下是可用的包(默认包含)J2SE版本6& 7
  3. 是的,它们会自动进入类路径。尝试导入其中一个类并编译/运行它以确认。 OTOH请注意,它们就像AWT类(ColorFont等),可以导入它们,而不是java.lang包,其类 需要在代码中包含import语句。

  4.   

    java.lang不需要导入..是不是因为lang类被更频繁地使用?

    基本上,是的。请注意,它仅与编译器相关。类文件包含完全限定的类名AFAIU。