如果我没有';t根据java包命名约定,命令";无法找到.class;爪哇;,正确的?

如果我没有';t根据java包命名约定,命令";无法找到.class;爪哇;,正确的?,java,classpath,package,naming,Java,Classpath,Package,Naming,“java Hello3”(带有Hello3.class a java类)给我的信息是否正常: Exception in thread "main" java.lang.NoClassDefFoundError: Hello3 (wrong name: pp/Hello3) 类是Hello3.java的编译二进制文件。这个java文件被声明在某个包“pp”下,但它不被放在“pp”目录中 package pp; public class Hello3 { public static vo

“java Hello3”(带有Hello3.class a java类)给我的信息是否正常:

Exception in thread "main" java.lang.NoClassDefFoundError: Hello3 (wrong name: pp/Hello3)
类是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中。IMHO,我认为这可以作为一种攻击

它应该是
java-cp pp.Hello3
,Hello3.java和Hello3.class文件必须按照包声明的指示位于
pp
目录下。

它应该是
java-cp pp.Hello3
,Hello3.java和Hello3.class文件必须按照包的指示位于
pp
目录下声明。

您确实需要在名为
pp
的目录中拥有Hello3.class。包含
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

您确实需要在名为
pp
的目录中拥有Hello3.class。包含
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类必须位于与包名一致的目录中。

这看起来是正确的行为。类将其包存储在内部,如果它位于不正确的目录中,则不会工作。它看起来是正确的行为。类将其包存储在内部,如果它位于不正确的目录中,则不会工作。