JavaRush /Blog Java /Random-VI /6 ngoại lệ Java gây khó chịu cho người mới
gram2005
Mức độ

6 ngoại lệ Java gây khó chịu cho người mới

Xuất bản trong nhóm
Thỉnh thoảng, tôi gặp những nhà phát triển mới đang gặp khó khăn trong việc hiểu các ngoại lệ đơn giản sau đây và tôi phải giải thích lại mọi thứ cho họ. Rất có thể, nhiều nhà phát triển Java có kinh nghiệm cũng gặp phải tình huống tương tự và giúp người mới đối phó với các trường hợp ngoại lệ sau. Vì vậy, tôi quyết định viết bài này và tham khảo nó trong tương lai. Bình luận và bổ sung vào danh sách loại trừ đều được chào đón. 6 ngoại lệ Java gây khó chịu cho người mới - 1
  1. NoClassDefFoundError: Đây là một trong những trường hợp ngoại lệ Exception in thread “main“ NoClassDefFoundErrorthường chào đón các nhà phát triển mới bước vào thế giới lập trình Java. Họ viết chương trình helloworld, vào dòng lệnh và viết “ java ” - lệnh thực thi và “BAM” :-) Sau một thời gian, người mới bắt đầu sẽ hiểu cách sửa ngoại lệ này và xem hello world của họ được in như thế nào.

    NoClassDefFoundErrorxảy ra khi Máy ảo Java (JVM) cố gắng truy cập một lớp trong thời gian chạy và lớp đó không được tìm thấy mặc dù lớp đó đã có mặt tại thời điểm biên dịch. Thông thường, ngoại lệ này xảy ra khi chạy chương trình Java thông qua lệnh “java“ với giá trị tham số không hợp lệ classpath. [ Classpathlà một tham số được đặt thông qua dòng lệnh hoặc thông qua một biến môi trường, cho biết máy ảo Java hoặc trình biên dịch Java nơi tìm kiếm các lớp hoặc gói do người dùng khai báo - khoảng. người dịch] Các lý do có thể bị loại trừ:

    • Lớp không có sẵn trong Classpath.
    • Thông thường tập lệnh được thực thi khi hệ điều hành khởi động sẽ thay đổi giá trị của biến môi trường classpath. Bạn có thể kiểm tra điều này bằng cách chạy setlệnh “ ” trên dòng lệnh Windows và xem liệu định nghĩa lớp có được bao gồm trong giá trị hay không classpath. Nếu muốn, bạn có thể khám phá thêm ngoại lệ này trên blog 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 аргумент неправильного типа.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION