Пакеты для начинающих - PullRequest
       2

Пакеты для начинающих

0 голосов
/ 02 октября 2011

Если файл класса принадлежит пакету, то

package PackageName;

включается в исходный код этого файла.Поэтому, когда jvm вызывается с помощью записи

java PackageName.classfilename

, он выполняется.

Является ли «package PackageName» гарантией jvm, что этот файл класса принадлежит именно этому пакету?Потому что, если мы опускаем инструкцию "package PackageName", то jvm все равно находит файл класса, но выдает

Exception in thread "main" java.lang.NoClassDefFoundError: Classfilename 
wrongname PackageName/ClassfileName

Это означает, что jvm находит файл, но есть некоторая причина, по которой он считает, что этот файл класса имеетнеправильное имя.

Ответы [ 2 ]

3 голосов
/ 02 октября 2011

Объявления пакетов в ваших классах должны соответствовать структуре папок, которая у вас есть для вашего кода. Пакеты используются JVM для нескольких «задач», от наглядности методов до разрешения ситуаций, когда два класса могут иметь одно и то же имя. NoClassDefFoundError фактически означает, что JVM не может найти класс с пакетом, который вы ему дали. Если вы опустите определение пакета в классе и запустите программу следующим образом: java ClassFileName JVM найдет класс, если вы запускаете команду java из папки, где находится ваш класс.

Также ... имена пакетов должны быть строчными, а имена классов должны начинаться с заглавных букв. :) Соглашения действительно полезны, когда кто-то еще читает ваш код!

Надеюсь, что комментарий помог.

1 голос
/ 02 октября 2011

Файл класса должен существовать в файловой системе в той же иерархии, которая определена в имени пакета.Если вы удалите имя пакета, я полагаю, что вы должны иметь файл в корневой папке вашего jar-файла для работы в «неназванном» пакете.Вероятно, вы удалили строку пакета из исходного файла, но все равно оставили определение класса в папке PackageName.

...