JavaRush /Java 博客 /Random-ZH /困扰新手的 6 个 Java 异常
gram2005
第 30 级

困扰新手的 6 个 Java 异常

已在 Random-ZH 群组中发布
有时我会遇到新的开发人员,他们坚持理解以下简单的异常,我必须向他们重新解释一切。最有可能的是,许多经验丰富的 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