java - 如果我不遵守 java 包命名约定,则命令 "java"无法找到 .class,对吧?

标签 java classpath package naming

“java Hello3”(Hello3.class 是一个 java 类)给我正常吗:

Exception in thread "main" java.lang.NoClassDefFoundError: Hello3 (wrong name: pp/Hello3)

Hello3.class是Hello3.java的编译二进制文件。这个java文件被声明在某个包“pp”下,但它没有放在“pp”目录中。

package pp;
public class Hello3 {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

我的命令 java Hello3.java 是在与 Hello3.java 相同的目录中执行的。更重要的是,即使是命令“java -cp . Hello3”也不起作用!也许是我的问题??

既然我从以下答案中得到了您的确认,我可能会在这里得出一个天真的结论:制作一个永远不起作用的 .class 太容易了。只需在包 XXX 下声明您的 .java,但不要将其放在目录 XXX 中。恕我直言,我认为这可以用作攻击!

最佳答案

您确实需要将 Hello3.class 放在名为 pp 的目录中。包含 pp 的目录应该位于类路径中。假设这个目录名为classes:

...
  |_ classes
         |_ pp
            |_ Hello3.class

启动 Java 程序的命令应该是

java -cp /the/path/to/classes pp.Hello3

或者,在 Windows 上

java -cp c:\the\path\to\classes pp.Hello3

关于java - 如果我不遵守 java 包命名约定,则命令 "java"无法找到 .class,对吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042483/

相关文章:

java - 我的 Java 记录器(比如 logback)如何找到我的代码的行号?

java - 在tomcat Web应用程序的类路径中动态添加属性文件

在 Weka 中以编程方式使用 LibSVM 的 java 类路径错误

Java 引用同一目录中的类

java - Selenium 在作为套件运行测试时找不到元素

java - 这个 sum() 究竟是如何工作的?

xcode - 开发 Flutter iOS 插件包 - Xcode 项目中的 Pods 文件夹为空

java - Java 是否提供了一种允许从层次结构中的包进行特殊访问的方法?

java - 缓冲图像颜色饱和度

java - Tomcat jar 是否要添加到类路径中?