Если я не соблюдаю соглашение об именах пакетов Java, расширение.класс не может быть найден командой «java», верно?

Нормально ли, что "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, который никогда не работает. Просто объявите свой .java в пакете XXX, но не помещайте его в каталог XXX. ИМХО, думаю, это можно использовать как атаку!

0
задан zell 8 November 2011 в 06:04
поделиться