簡體   English   中英

如果我不遵守Java包的命名約定,則無法通過命令“ java”找到.class,對嗎?

[英]If I don't respect the java package naming convention, the .class cannot be found by the command “java”, right?

“ 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中。 恕我直言,我認為這可以用作攻擊!

您確實確實需要在名為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 -cp <path_to_classpath_libs> pp.Hello3 ,並且Hello3.java和Hello3.class文件必須在軟件包聲明所指示的pp目錄下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM