【问题标题】:What's the default classpath when not specifying classpath?不指定类路径时,默认的类路径是什么?
【发布时间】:2011-11-22 13:34:34
【问题描述】:

想知道不指定类路径选项时默认的类路径是什么?

【问题讨论】:

  • $JRE_HOME 和我记得的当前工作目录。
  • 创建一个只打印出 System.getProperty("java.class.path") 的类,你就会知道 :-)
  • @StijnGeukens,不要忘记我们需要从命令行运行该代码,否则 IDE 将修改 -classpath 标志。
  • @Pacerier:确实,有效点。
  • 请注意,“CLASSPATH 变量是告诉应用程序(包括 JDK 工具)在哪里寻找用户类的一种方式。(属于JRE、JDK 平台和扩展应通过其他方式定义,例如引导类路径或扩展目录。)”。也就是说,在运行时加载的大多数类没有在类路径中指定。

标签: java


【解决方案1】:

当前工作目录 (.)。

来自The Java™ tutorials: PATH and CLASSPATH:

类路径的默认值为“.”,表示只搜索当前目录。指定 CLASSPATH 变量或 -cp 命令行开关会覆盖此值。

这是否包括子目录?

不,类路径中没有条目是“递归的”。您必须明确列出每个子目录(或 jar)。但是,如果您有一个代表类pkg.subpkg.Example 的Example.class 文件,并且使用了默认的类路径,那么该文件应该位于./pkg/subpkg/Example.class 中。

如果java 尝试解析pkg.subpkg.Example,它将查看每个类路径条目的/pkg/subpkg。 IE。您不必在类路径中列出.、pkg 和pkg/subpkg,只需列出.。

【讨论】:

  • 这是什么意思?当前目录用于什么? java.exe 文件在哪里?源头在哪里?很困惑....
  • 当前工作目录是您上次cd'ed 进入的目录。如果您的 Windows shell 显示 C:\dir\subdir>,则当前工作目录为 C:\dir\subdir(或在 *nix 上,如果您的提示显示类似 user@machine:/usr/bin$ 的内容,则当前工作目录为 /usr/bin)。
  • 只有当前工作目录?或者它是递归的,我的意思是当前目录下的任何子目录?
  • 更新了答案。
【解决方案2】:

我认为人们对这个人的问题的回答过于字面意思了。是的,CLASSPATH 默认为“.”,但是即使您没有设置 CLASSPATH 或使用 -classpath 命令行参数,也有一堆类会自动加载。

以下是了解此过程的好地方:

http://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html

【讨论】:

  • 问题所指的 CLASSPATH 是加载用户和第三方组件的类加载器使用的路径。存在其他两个类加载器: - 外部库类加载器 - java 标准库类加载器。这些类加载器自己知道在哪里寻找类。
  • 这是我一直在寻找的答案。非常感谢您的链接。我对 JRE 库的加载方式感到非常困惑,因为它们的位置不在类路径上。
【解决方案3】:

它是当前工作目录“。”

你也可以自己去看看

class CheckClassPath{
    public static void main(String args[]){
        System.out.println(System.getProperty("java.class.path"));
    }
}

【讨论】:

    【解决方案4】:

    默认的类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行选项会覆盖该默认值,因此如果要将当前目录包含在搜索路径中,则必须包含“。”在新设置中。 official manual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 2014-12-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多