📅  最后修改于: 2023-12-03 15:35:54.478000             🧑  作者: Mango
当我们尝试在不同的包中运行 Java 命令时,可能会出现命令不起作用的问题。
这是因为 Java 编译器在编译时会自动将类的完全限定名添加到生成的字节码文件中。这意味着,当我们在使用 Java 命令时,必须指定完全限定名。
假设我们有以下两个类,分别位于 com.example.package1
和 com.example.package2
包中:
// com.example.package1.HelloWorld.java
package com.example.package1;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
com.example.package2.GoodbyeWorld.sayGoodbye();
}
}
// com.example.package2.GoodbyeWorld.java
package com.example.package2;
public class GoodbyeWorld {
public static void sayGoodbye() {
System.out.println("Goodbye, World!");
}
}
在 HelloWorld
类中,我们在 main
方法中调用了 GoodbyeWorld
类的 sayGoodbye
方法。我们可以在 HelloWorld
类的同一个包中运行它,如下所示:
# 在 com.example.package1 中运行
java HelloWorld
如果我们尝试在不同的包中运行它,如下所示:
# 在 com.example.package2 中运行
java com.example.package1.HelloWorld
这将会出现错误信息 Error: Could not find or load main class com.example.package1.HelloWorld
,因为 Java 命令没有找到对应的类。
为了解决这个问题,我们需要指定类的完全限定名。在上面的例子中,我们可以在 com.example.package2
中运行如下命令:
java com.example.package1.HelloWorld
这将会输出如下内容:
Hello, World!
Goodbye, World!
因此,在使用 Java 命令时,确保指定正确的完全限定名是非常重要的。