-
NoClassDefFoundError
Exception in thread “main“ NoClassDefFoundError
: 이는 새로운 개발자를 Java 프로그래밍의 세계로 초대하는 경우가 많은 예외 중 하나입니다 . 그들은 helloworld 프로그램을 작성하고, 명령줄로 이동하여 " java "(실행 명령 및 "BAM")를 작성합니다. :-) 잠시 후 초보자는 이 예외를 수정하는 방법을 이해하고 hello world가 어떻게 인쇄되는지 확인할 수 있습니다.NoClassDefFoundError
JVM(Java Virtual Machine)이 런타임에 클래스에 액세스하려고 시도하고 컴파일 타임에 동일한 클래스가 있었음에도 불구하고 클래스를 찾을 수 없을 때 발생합니다. 대부분의 경우 이 예외는 잘못된 매개변수 값을 사용하여 "java" 명령을 통해 Java 프로그램을 실행할 때 발생합니다classpath
. [Classpath
는 명령줄이나 환경 변수를 통해 설정되는 매개변수로, 사용자가 선언한 클래스나 패키지를 찾을 위치를 Java 가상 머신이나 Java 컴파일러에 나타냅니다. 번역자] 제외될 수 있는 이유:- 에서는 클래스를 사용할 수 없습니다
Classpath
. - 운영 체제가 시작될 때 실행되는 스크립트는 종종 환경 변수의 값을 변경합니다
classpath
. Windows 명령줄에서 " " 명령을 실행set
하고 클래스 정의가 값에 포함되어 있는지 확인하면 이를 확인할 수 있습니다classpath
. 원하는 경우 Javarevisited 블로그 에서 이 예외를 자세히 살펴볼 수 있습니다 .
- 에서는 클래스를 사용할 수 없습니다
-
ClassNotFoundException
: ИсключениеClassNotFoundException
это еще одно исключение, из-за которого новичкам, только начинающим программировать на Java, снятся кошмары. Интересно что для среднего разработчика нужно некоторое время чтобы перестать путатьClassNotFoundException
иNoClassDefFoundError
между собой. И поэтому вопрос о разнице этих двух исключений остается одним из часто задаваемых на собеседовании на позицию junior Java разработчика.ClassNotFoundException
случается когда JVM пытается загрузить определенный класс и не обнаруживает такого же вclasspath
. Обычно новички сталкиваются с этим в codeе, который подключается к базе данных используя JDBC библиотеку. Пытаясь загрузить драйвер с помощью следующего codeаClass.forName( “JDBCdriver”)
. Хороший материал поClassNotFoundException
можно найти здесь. Так же рекомендуется ознакомиться и понять концепцию загрузчиков классов в Java чтобы эффективно справляться с этим исключением. Вы возможно захотите посмотреть следующую page о том How настроить classpath в окружениях Win/Unix. А так, How следует из documentации Java, это исключение случается в следующих случаях:- Когда пытаются загрузить класс используя метод
Class.forName
и файл.class
не существует вclasspath
. Это самый частый случай из всех трех. - Когда загрузчик класса пытается загрузить класс используя метод
loadClass
. - Когда загрузчик класса пытается загрузить класс используя
findSystemClass
.
- Когда пытаются загрузить класс используя метод
-
NullPointerException
: исключениеNullPointerException
понять легче и новички с ним справляются быстрее нежели с двумя предыдущими. В тоже время причину исключения очень легко найти так How приводится номер строки где оно случилось. В первую очередь исключение случается когда JVM пытается обратиться к null в том месте где должен был быть an object. Чаще всего это случается когда JVM пытается вызвать метод используя an object и оказывается что an object equalsnull
. Другие случаи, How упоминается в documentации Java, могут быть следующими:- Получая доступ к or изменяя метод an object, который equals
null
. - Получая длину массива когда он equals
null
. - Получая доступ к or меняя an objectы, которые являются заключенными в массив, который equals
null
.
null
(далее – проверка на null – прим. переводчика). Поэтому рано or поздно разработчик начинает это использовать и тогда проверки на null появляются везде. Интересно что использовать везде проверку наnull
не считается примером хорошего программирования. Основная причина почему проверка наnull
используется разработчиками это передавать an objectnull
в случаи ошибки. В место этого пример хорошего программирования, который должен пропагандироваться программистами, это передавать пустой an object когда condition для главной/рабочей ветви программы не удовлетворяется. Это в свою очередь уменьшило бы количество проверок наnull
. Все-таки легче говорить нежели применять это на практике.:) - Получая доступ к or изменяя метод an object, который equals
ClassCastException
: это еще одно из исключений, с которым знакомятся новички когда пытаются привести an object к классу, экземпляром которого он не является. Опять же его довольно легко понять, найти причину и исправить. Один из способов избежать этого исключения, когда во время исполнения тип an object не известен, это использовать проверку является ли an object экземпляром определенного класса: “instanceof
”.ArrayIndexOutOfBoundsException
: название этого исключения говорит само за себя. Оно случается когда JVM пытается получить доступ к элементу массива используя неверный индекс, на пример, отрицательный (-1) or больший or равный размеру массива. Его легко понять, найти причину и исправить. Следующий пример codeа поможет избежать этого исключения:for( index = 0; index < array.length; index++ )
Обратите внимание что индекс начинается с 0 и возрастает до величины на 1 меньше размера массива.-
IllegalArgumentException
: Это исключение самое простое, его легко понять, найти его причину и исправить. Оно случается когда JVM пытается передать методу неподходящий аргумент or аргумент неправильного типа.
gram2005
레벨 30
초보자를 괴롭히는 6가지 Java 예외
때때로 나는 다음과 같은 간단한 예외를 이해하는 데 어려움을 겪는 새로운 개발자를 만나서 그들에게 모든 것을 다시 설명해야 합니다. 경험이 풍부한 많은 Java 개발자는 비슷한 상황에 처해 있으며 초보자가 다음 예외에 대처하도록 돕습니다. 그래서 이 글을 작성하고 나중에 참고하기로 했습니다. 제외 목록에 대한 의견과 추가를 환영합니다.
GO TO FULL VERSION