📜  不同包中的 java 命令不起作用 - Java (1)

📅  最后修改于: 2023-12-03 15:35:54.478000             🧑  作者: Mango

不同包中的 Java 命令不起作用

当我们尝试在不同的包中运行 Java 命令时,可能会出现命令不起作用的问题。

这是因为 Java 编译器在编译时会自动将类的完全限定名添加到生成的字节码文件中。这意味着,当我们在使用 Java 命令时,必须指定完全限定名。

假设我们有以下两个类,分别位于 com.example.package1com.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 命令时,确保指定正确的完全限定名是非常重要的。