2010-09-23 1 views
-1

Что такое ClassDefNotFoundException и NoClassDefFoundError и объяснить различия между этими двумя?ClassDefNotFoundException

+2

домашняя работа или вопрос об интервью? –

+0

Вы пробовали поиск? что ты нашел? –

+4

Извините, но это довольно ясно из Javadoc. Единственное, что может потребовать больше объяснений, это разница между Exception и Error, но я уверен, что есть много вопросов, которые уже задают это. @ Thorbjørn Ravn Andersen - это был бы могучий неприятный вопрос для интервью, если бы не ответ на него был «Я бы посмотрел его в Javadoc» – CurtainDog

ответ

6

Как правило, NoClassDefFoundError выбрасывается, если класс не удалось инициализировать.

Когда класс используется в первый раз, он инициализируется. если это не по какой-либо причине, то возникает соответствующее исключение. http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.4

Когда класс используется снова, он, как известно, поврежден. Инициализация не будет предпринята снова. JVM бросает таинственный NoClassDefFoundError. Не совсем описать проблему, может быть довольно запутанной для диагностики. Было бы лучше, если будет выброшено что-то вроде ClassInitFailedError.

Когда вы видите NoClassDefFoundError, вы должны искать бревно в обратном направлении, найти причину, почему класс не удалось инициализировать (надеюсь, он вошел в систему)


Там нет ClassDefNotFoundException в стандартной Java Lib, так что я не знаю, о чем вы говорите.

+1

Да, это ClassNotFoundException. Как проверено, кто-нибудь, кто сделал что-либо с библиотеками отражения, должен быть слишком хорошо знаком с ним. NoClassDefFoundError появляется, когда вы скомпилированы против класса, который среда выполнения не может найти. Он появляется чаще всего, когда classpath в вашей сборке не соответствует пути к классам для вашей среды выполнения, а также когда вы делаете такие вещи, как насмешка и DI, я думаю. – CurtainDog

+1

отказ от решения других классов может быть одной из причин, по которым процесс инициализации завершился неудачно. но в целом многие вещи могут пойти не так. в моей собственной практике большинство случаев - это то, что статические инициализаторы имеют ошибки программирования и внезапно заканчиваются. – irreputable

2

ClassNotFoundException бросается, когда класс не может быть найден в пути к классам. NoClassDefFoundError происходит, когда класс не может быть создан экземпляром new, потому что jvm не смог инициализировать класс. Это может быть конструктор, который бросает исключения, или статический блок взваливается, или несоответствие версии.

+4

И разница? –

-1

Ядро Java - Что ClassDefNotFoundException и ...

http://www.geekinterview.com/question_details/47825

+2

Очевидно, что вы ищете для Selva и выплевываете первый результат здесь. Это приведет к более тривиальным вопросам, задаваемым здесь на этом форуме ... –

Смежные вопросы