-
NoClassDefFoundError
: Jest to jeden z tych wyjątków, któryException in thread “main“ NoClassDefFoundError
często wita nowych programistów w świecie programowania w języku Java. Piszą program helloworld, idą do wiersza poleceń i wpisują „ java ” - polecenie do wykonania i „BAM” :-) Po chwili początkujący zrozumieją, jak naprawić ten wyjątek i zobaczą, jak zostanie wydrukowany ich hello world.NoClassDefFoundError
Dzieje się tak, gdy wirtualna maszyna Java (JVM) próbuje uzyskać dostęp do klasy w czasie wykonywania, ale klasa nie zostaje znaleziona, mimo że ta sama klasa była obecna w czasie kompilacji. Najczęściej ten wyjątek występuje podczas uruchamiania programu Java za pomocą polecenia „java” z nieprawidłową wartością parametruclasspath
. [Classpath
to parametr ustawiany z linii poleceń lub poprzez zmienną środowiskową, wskazujący wirtualnej maszynie Java lub kompilatorowi Java, gdzie szukać klas lub pakietów zadeklarowanych przez użytkownika - ok. tłumacz] Możliwe przyczyny wykluczenia:- Klasa niedostępna w
Classpath
. - Często skrypt wykonywany podczas uruchamiania systemu operacyjnego zmienia wartość zmiennej środowiskowej
classpath
. Możesz to sprawdzić, uruchamiającset
polecenie „” w wierszu poleceń systemu Windows i sprawdzając, czy wartość zawiera definicję klasyclasspath
. Jeśli chcesz, możesz dokładniej zapoznać się z tym wyjątkiem na blogu Javarevisited .
- Klasa niedostępna w
-
ClassNotFoundException
: ИсключениеClassNotFoundException
это еще одно исключение, из-за которого новичкам, только начинающим программировать на Java, снятся кошмары. Интересно что для среднего разработчика нужно некоторое время чтобы перестать путатьClassNotFoundException
иNoClassDefFoundError
между собой. И поэтому вопрос о разнице этих двух исключений остается одним из часто задаваемых на собеседовании на позицию junior Java разработчика.ClassNotFoundException
случается когда JVM пытается загрузить определенный класс и не обнаруживает такого же вclasspath
. Обычно новички сталкиваются с этим в kodе, который подключается к базе данных используя JDBC библиотеку. Пытаясь загрузить драйвер с помощью следующего kodаClass.forName( “JDBCdriver”)
. Хороший материал поClassNotFoundException
можно найти здесь. Так же рекомендуется ознакомиться и понять концепцию загрузчиков классов в Java чтобы эффективно справляться с этим исключением. Вы возможно захотите посмотреть следующую strona о том Jak настроить classpath в окружениях Win/Unix. А так, Jak следует из dokumentации Java, это исключение случается в следующих случаях:- Когда пытаются загрузить класс используя метод
Class.forName
и файл.class
не существует вclasspath
. Это самый частый случай из всех трех. - Когда загрузчик класса пытается загрузить класс используя метод
loadClass
. - Когда загрузчик класса пытается загрузить класс используя
findSystemClass
.
- Когда пытаются загрузить класс используя метод
-
NullPointerException
: исключениеNullPointerException
понять легче и новички с ним справляются быстрее нежели с двумя предыдущими. В тоже время причину исключения очень легко найти так Jak приводится номер строки где оно случилось. В первую очередь исключение случается когда JVM пытается обратиться к null в том месте где должен был быть obiekt. Чаще всего это случается когда JVM пытается вызвать метод используя obiekt и оказывается что obiekt równa sięnull
. Другие случаи, Jak упоминается в dokumentации Java, могут быть следующими:- Получая доступ к Lub изменяя метод obiektа, который równa się
null
. - Получая длину массива когда он równa się
null
. - Получая доступ к Lub меняя obiektы, которые являются заключенными в массив, который równa się
null
.
null
(далее – проверка на null – прим. переводчика). Поэтому рано Lub поздно разработчик начинает это использовать и тогда проверки на null появляются везде. Интересно что использовать везде проверку наnull
не считается примером хорошего программирования. Основная причина почему проверка наnull
используется разработчиками это передавать obiektnull
в случаи ошибки. В место этого пример хорошего программирования, который должен пропагандироваться программистами, это передавать пустой obiekt когда stan для главной/рабочей ветви программы не удовлетворяется. Это в свою очередь уменьшило бы количество проверок наnull
. Все-таки легче говорить нежели применять это на практике.:) - Получая доступ к Lub изменяя метод obiektа, который równa się
ClassCastException
: это еще одно из исключений, с которым знакомятся новички когда пытаются привести obiekt к классу, экземпляром которого он не является. Опять же его довольно легко понять, найти причину и исправить. Один из способов избежать этого исключения, когда во время исполнения тип obiektа не известен, это использовать проверку является ли obiekt экземпляром определенного класса: “instanceof
”.ArrayIndexOutOfBoundsException
: название этого исключения говорит само за себя. Оно случается когда JVM пытается получить доступ к элементу массива используя неверный индекс, на пример, отрицательный (-1) Lub больший Lub равный размеру массива. Его легко понять, найти причину и исправить. Следующий пример kodа поможет избежать этого исключения:for( index = 0; index < array.length; index++ )
Обратите внимание что индекс начинается с 0 и возрастает до величины на 1 меньше размера массива.-
IllegalArgumentException
: Это исключение самое простое, его легко понять, найти его причину и исправить. Оно случается когда JVM пытается передать методу неподходящий аргумент Lub аргумент неправильного типа.
gram2005
Poziom 30
6 wyjątków Java, które nękają początkujących
Od czasu do czasu spotykam nowych programistów, którzy utknęli w zrozumieniu poniższych prostych wyjątków i muszę im wszystko od nowa wyjaśniać. Najprawdopodobniej wielu doświadczonych programistów Java znajduje się w podobnej sytuacji i pomaga nowicjuszom poradzić sobie z następującymi wyjątkami. Dlatego też zdecydowałem się napisać ten artykuł i odnieść się do niego w przyszłości. Komentarze i uzupełnienia listy wykluczeń są mile widziane.
GO TO FULL VERSION