JavaRush /Java Blog /Random-TW /困擾新手的 6 個 Java 異常
gram2005
等級 30

困擾新手的 6 個 Java 異常

在 Random-TW 群組發布
有時我會遇到新的開發人員,他們堅持要理解以下簡單的異常,我必須向他們重新解釋一切。最有可能的是,許多經驗豐富的 Java 開發人員發現自己處於類似的情況,並幫助新手應對以下異常。因此,我決定寫這篇文章,以供以後參考。歡迎對排除清單提出評論和補充。 困擾新手的 6 個 Java 異常 - 1
  1. NoClassDefFoundErrorException 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部落格上進一步探討此異常。
  2. 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, это исключение случается в следующих случаях:

    1. Когда пытаются загрузить класс используя метод Class.forName и файл .class не существует в classpath. Это самый частый случай из всех трех.
    2. Когда загрузчик класса пытается загрузить класс используя метод loadClass.
    3. Когда загрузчик класса пытается загрузить класс используя findSystemClass.
  3. NullPointerException: исключение NullPointerExceptionпонять легче и новички с ним справляются быстрее нежели с двумя предыдущими. В тоже время причину исключения очень легко найти так How приводится номер строки где оно случилось. В первую очередь исключение случается когда JVM пытается обратиться к null в том месте где должен был быть an object. Чаще всего это случается когда JVM пытается вызвать метод используя an object и оказывается что an object equals null. Другие случаи, How упоминается в documentации Java, могут быть следующими:

    1. Получая доступ к or изменяя метод an object, который equals null.
    2. Получая длину массива когда он equals null.
    3. Получая доступ к or меняя an objectы, которые являются заключенными в массив, который equals null.
    Самый простой способ избежать этого исключения это добавить проверку на неequalsство null (далее – проверка на null – прим. переводчика). Поэтому рано or поздно разработчик начинает это использовать и тогда проверки на null появляются везде. Интересно что использовать везде проверку на null не считается примером хорошего программирования. Основная причина почему проверка на null используется разработчиками это передавать an object null в случаи ошибки. В место этого пример хорошего программирования, который должен пропагандироваться программистами, это передавать пустой an object когда condition для главной/рабочей ветви программы не удовлетворяется. Это в свою очередь уменьшило бы количество проверок на null. Все-таки легче говорить нежели применять это на практике.:)

  4. ClassCastException: это еще одно из исключений, с которым знакомятся новички когда пытаются привести an object к классу, экземпляром которого он не является. Опять же его довольно легко понять, найти причину и исправить. Один из способов избежать этого исключения, когда во время исполнения тип an object не известен, это использовать проверку является ли an object экземпляром определенного класса: “instanceof”.

  5. ArrayIndexOutOfBoundsException: название этого исключения говорит само за себя. Оно случается когда JVM пытается получить доступ к элементу массива используя неверный индекс, на пример, отрицательный (-1) or больший or равный размеру массива. Его легко понять, найти причину и исправить. Следующий пример codeа поможет избежать этого исключения: for( index = 0; index < array.length; index++ )
    Обратите внимание что индекс начинается с 0 и возрастает до величины на 1 меньше размера массива.

  6. IllegalArgumentException: Это исключение самое простое, его легко понять, найти его причину и исправить. Оно случается когда JVM пытается передать методу неподходящий аргумент or аргумент неправильного типа.

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION