【问题标题】:default classpath current directory anomaly默认类路径当前目录异常
【发布时间】:2013-07-07 13:13:06
【问题描述】:

我正在尝试编译和运行简单的 Java 程序。这个程序基本上打印出 hello world 短语。我没有指定 -cp 选项,也没有 CLASSPATH 环境变量。因此,用户类路径仅限于当前目录。

现在,编译效果很好。

rustam@rustam-laptop:~/temp/bird_test$ javac Sparrow.java 

此命令生成所需的 .class 文件。当我尝试运行 .class 文件时会发生奇怪的事情。以下命令效果很好。

rustam@rustam-laptop:~/temp/bird_test$ java Sparrow

但是当我尝试以下命令时

rustam@rustam-laptop:~/temp/bird_test$ java ./Sparrow

我收到以下错误:

Error: Could not find or load main class ..Sparrow

WTF!我认为符号 ./ 指的是当前目录。

【问题讨论】:

    标签: java classpath


    【解决方案1】:

    java 将类名作为参数。它不需要文件路径。然后 java 类加载器将类名 (Sparrow) 解析为基于类路径的 .class 文件,即它在类路径中列出的每个目录和 jar 中查找 Sparrow.class 文件。

    让我们举一个尊重良好实践的例子,因此不使用默认包:

    package foo.bar;
    
    public class Baz {
        ...
    }
    

    上述类的类名是foo.bar.Baz。要执行它,您必须使用

    java foo.bar.Baz
    

    java 将在类路径中列出的所有目录中查找foo/bar/Baz.class。因此,如果类路径设置为/hello/world,它将查找文件/hello/world/foo/bar/Baz.class

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多