默认类路径当前目录异常



我正在尝试编译和运行简单的Java程序。这个程序基本上打印出"你好"世界短语。我没有指定-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将类名作为参数。它不采用文件路径。然后,java类加载器将类名(Sparrow)解析为基于类路径的.class文件,即在类路径中列出的每个目录和jar中查找Sparrow.class文件。

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

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

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

java foo.bar.Baz

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

最新更新