-
NoClassDefFoundError
Exception in thread “main“ NoClassDefFoundError
:這是經常歡迎新開發人員進入 Java 程式設計世界的例外情況之一。他們編寫一個 helloworld 程序,進入命令列並寫入“ java ”——要執行的命令和“BAM”:-) 過了一段時間,初學者將了解如何修復此異常並查看如何打印他們的 hello world。NoClassDefFoundError
當 Java 虛擬機器 (JVM) 嘗試在執行時間存取某個類,但未找到該類時,即使在編譯時存在相同的類,也會發生這種情況。大多數情況下,當透過帶有無效參數值的「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