关于javax与java包的一些基本问题
当我转到JavaDocs时,我在关于javax与java包的一些基本问题,java,packages,Java,Packages,当我转到JavaDocs时,我在java包中找到一些类,而在javax中找到一些类。然后我遇到了 我从这个链接得到了什么 几乎所有的答案都是javax包只是java库的一个扩展。我的意思是,第一个Java必须附带核心Java库,即Javapackage,但当开发出更多的包时,它们就与javax一起发布了。对吧? 作为开发人员,我会立即想到一些问题。这些不同名称的包对Java开发人员有什么影响。以下是问题和分析:- 即使我同意javax只是核心java的扩展。但是我再次看到完全不同的包,比如org
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.lang
)中一样,在默认情况下尝试在这些包中查找类org.omg
包(显然)是由网站上的人创建的。你看到包名和域名之间的联系了吗Color
,Font
等),可以在其中导入它们,而不是java.lang
包,它的类不而不需要在代码中有导入语句java.lang不需要导入..是因为lang类使用更频繁吗
基本上,是的。请注意,它只与编译器相关。类文件包含完全限定的类名AFAIU。我认为它相当随意。正如乔恩·斯基特(Jon Skeet)在回答你所链接的问题时所说,大部分都是历史性的。一个很好的例子是javax.sql,它包含与JDBC相关的类,这些类最初是J2EE的一部分,但在1.4中被引入J2SE。因此,现在在java.sql和javax.sql之间存在无意义的类划分。JDK内部的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类使用更频繁吗?