我正在尝试编译和运行简单的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!我认为符号./指的是当前目录。
答案 0 :(得分:2)
java
将类名作为参数。它不需要文件路径。然后,类名(Sparrow)由java类加载器解析为基于类路径的.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
。