Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于javax与java包的一些基本问题_Java_Packages - Fatal编程技术网

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

关于javax与java包的一些基本问题,java,packages,Java,Packages,当我转到JavaDocs时,我在java包中找到一些类,而在javax中找到一些类。然后我遇到了 我从这个链接得到了什么 几乎所有的答案都是javax包只是java库的一个扩展。我的意思是,第一个Java必须附带核心Java库,即Javapackage,但当开发出更多的包时,它们就与javax一起发布了。对吧? 作为开发人员,我会立即想到一些问题。这些不同名称的包对Java开发人员有什么影响。以下是问题和分析:- 即使我同意javax只是核心java的扩展。但是我再次看到完全不同的包,比如org

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

我从这个链接得到了什么 几乎所有的答案都是
javax
包只是java库的一个扩展。我的意思是,第一个Java必须附带核心Java库,即
Java
package,但当开发出更多的包时,它们就与
javax
一起发布了。对吧?

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

  • 即使我同意
    javax
    只是核心java的扩展。但是我再次看到完全不同的包,比如
    org.omg.CORBA
    等等。为什么命名为
    javax.omg.CORBA
  • javax
    org
    这样的软件包是否随标准JDK和JRE下载一起提供?这些是否需要从JSE 1.6中单独下载
  • 引导类加载器是否会像在核心Java类(如
    Java.lang
    )中一样,在默认情况下尝试在这些包中查找类
  • 他们通常来自非Sun/Oracle的政党。例如,
    org.omg
    包(显然)是由网站上的人创建的。你看到包名和域名之间的联系了吗
  • 不,如果它们在J2SE JavaDocs中列出了某个特定版本,那么它们是该版本的标准配置。以下是J2SE版本&(默认情况下包括)可用的软件包
  • 是的,它们自动位于类路径上。尝试导入其中一个类并编译/运行它以确认这一点。Oto注意到,它们类似于AWT类(
    Color
    Font
    等),可以在其中导入它们,而不是
    java.lang
    包,它的类不而不需要在代码中有导入语句

  • java.lang不需要导入..是因为lang类使用更频繁吗


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

    我认为它相当随意。正如乔恩·斯基特(Jon Skeet)在回答你所链接的问题时所说,大部分都是历史性的。一个很好的例子是javax.sql,它包含与JDBC相关的类,这些类最初是J2EE的一部分,但在1.4中被引入J2SE。因此,现在在java.sql和javax.sql之间存在无意义的类划分。JDK内部的java/javax拆分没有特别的意义

  • CORBA类之所以如此,是因为它们没有被Java标准定义;它们是CORBA规范中定义的接口的翻译
  • 标准J2SE JDK/JRE(javax.sql,javax.xml)附带了大量javax.*包。还有一些javax.*包没有(javax.inject、javax.servlet等)。但是没有不在JDK中的java.*包
  • 我相信引导类加载器加载java.*和javax.*类是一样的

  • 从历史上看,java.*包是JDK附带的包,而javax.*包是必须单独下载的包。在某种程度上,它仍然以这种方式工作;所有java.*软件包都附带JDK,还有许多javax.*软件包,如servlet,必须单独下载

    当Sun决定将一些javax.*包(如Swing)移动到主JDK中时,这个方案就遇到了麻烦。他们实际上打算将包名从javax.swing更改为java.swing,但当很明显这会破坏大量代码的向后兼容性时,他们决定将包移入,但保留javax.swing名称。因此,这个名字不再是指示性的,而是出于历史原因而存在的


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

    我不理解第一个问题。。。你能详细说明/重写一下吗?可能是重复的,谢谢汤姆漂亮的澄清。正如您所说,java标准没有定义corba类,但我可以在jre6/jdk.1.6 lik class org.omg.corba.AnyHolder下看到这些类。我想问的另一个问题是,当javax.servlet被广泛使用时,它为什么没有包含在核心javakib中。这是因为它们是特定的servlet容器(如tomcat)和不同的含义吗?这就是为什么我可以在container/lib文件夹中看到这些库,但不是作为jre6/jdk1.6的一部分?CORBA类包含在JDK中,就像java.lang.String这样的基本内容一样,尽管Sun没有定义它们。他们认为它们是如此有用,以至于每个人都应该拥有它们(或者至少,他们在1998年就拥有了)。org.w3c.dom和org.xml.sax类也是如此。servlet类不包括在JDK中,因为没有servlet容器(如Tomcat或Jetty)就无法使用它们。例如,在桌面应用程序或小程序中使用它们是不可能的。因此,它们不在基本的JDK中,有一些包,比如javax.inject,在任何地方都可能有用,JDK中也可能有用。然而,它们是非常新的,所以它们是单独定义的。也许有一天,他们会进入JDK。还有一个问题,你知道为什么java.lang不需要导入,而其他的则需要在jre6中。这是因为lang类使用更频繁吗?