java:导入、类路径和包

java:导入、类路径和包,java,import,classpath,package,Java,Import,Classpath,Package,我有一个导入org.w3c.dom.Document的文件。编译和运行很好,但我不明白它怎么知道在哪里可以找到这个包,我只是好奇它是如何工作的。我使用locate命令尝试查找org.w3c.dom,但什么也没有得到。这些包裹在哪里?在我看来,正确的位置应该是CLASSPATH环境变量,因为我的搜索结果似乎表明了这一点。这是正确的吗?无论如何,我不知道如何找出我的类路径变量是什么。它似乎不是我的shell所知道的环境变量。JVM使用类路径设置查找类,其中设置了指向所需包的所有路径。可以通过多种方式

我有一个导入org.w3c.dom.Document的文件。编译和运行很好,但我不明白它怎么知道在哪里可以找到这个包,我只是好奇它是如何工作的。我使用locate命令尝试查找org.w3c.dom,但什么也没有得到。这些包裹在哪里?在我看来,正确的位置应该是CLASSPATH环境变量,因为我的搜索结果似乎表明了这一点。这是正确的吗?无论如何,我不知道如何找出我的类路径变量是什么。它似乎不是我的shell所知道的环境变量。

JVM使用类路径设置查找类,其中设置了指向所需包的所有路径。可以通过多种方式设置类路径。您首先提到的是CLASSPATH环境变量。它是可选的,可以取消设置。第二种方式是显式选项“-cp”,用于“java”可执行文件


另外,一些JRE运行时jar默认隐式地添加到类路径中,因此您不需要自己搜索和添加标准包(特别是您在问题中提到的标准包)。

这将是核心库的一部分(
rt.jar
),因此无论您在哪里安装java JRE,都可以使用它;特别是在
$JAVA_HOME/jre/lib下

您可以使用
jar
命令查看
.jar
文件内部。要查看您提到的课程,您可以执行以下操作:

jar tvf rt.jar 
这将列出该jar中的所有类

请注意,JVM会自动搜索此位置-它不需要,也不包含在CLASS_PATH环境变量中。(您可以添加它,但它只是多余的)

为清晰起见进行编辑:

JVM默认包括
/jre/lib
/jre/lib/ext
。其他任何内容都必须由您通过
-cp
选项直接将其传递给java,或将其添加到
CLASS\u PATH
环境变量来显式添加


相关文档可在以下位置找到:

尝试从其自己的目录中编译MessConventer.java

javac-d….\-cp…\。Messconner.java

-d-为包创建目录结构


-cp-为用户文件提供类路径,在其中可以找到用户定义的类

我的观点是,无论如何使用CLASSPATH环境变量都是一个坏主意。将-classpath参数传递给java或javac是更好的选择。是否有其他正在隐式添加的jar?在哪里可以找到隐式添加到类路径的那些JAR的列表?那么如何查看我的类路径呢?事实上,您可以查看JDK安装目录来检查运行时jar(rt.jar)。但是这些jar没有显示在类路径中,因为它们是Java运行时库的一部分。我没有这个环境变量是一个问题吗?它的用途是什么?谁负责设置它?@bhh1988-我只是在回答中使用JAVA_HOME来说明文件的位置;我不知道您在计算机上的何处安装了java;)与CLASS_PATH一样,运行Java程序也不需要它——就像我在示例中使用它一样,它通常用于其他用途,以便能够找到您在计算机上安装Java的位置。
CLASSPATH
,而不是
CLASS_PATH
,非常感谢您提到jar tvf命令。对于Java新手来说,很难确定如何获取jar中包含的包名,这非常有帮助。