JavaRush /Blog Java /Random-PL /6 wyjątków Java, które nękają początkujących
gram2005
Poziom 30

6 wyjątków Java, które nękają początkujących

Opublikowano w grupie Random-PL
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. 6 wyjątków Java, które nękają początkujących - 1
  1. NoClassDefFoundError: Jest to jeden z tych wyjątków, który Exception in thread “main“ NoClassDefFoundErrorczę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.

    NoClassDefFoundErrorDzieje 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ą parametru classpath. [ Classpathto 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ąc setpolecenie „” w wierszu poleceń systemu Windows i sprawdzając, czy wartość zawiera definicję klasy classpath. Jeśli chcesz, możesz dokładniej zapoznać się z tym wyjątkiem na blogu Javarevisited .
  2. 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, это исключение случается в следующих случаях:

    1. Когда пытаются загрузить класс используя метод Class.forName и файл .class не существует в classpath. Это самый частый случай из всех трех.
    2. Когда загрузчик класса пытается загрузить класс используя метод loadClass.
    3. Когда загрузчик класса пытается загрузить класс используя findSystemClass.
  3. NullPointerException: исключение NullPointerExceptionпонять легче и новички с ним справляются быстрее нежели с двумя предыдущими. В тоже время причину исключения очень легко найти так Jak приводится номер строки где оно случилось. В первую очередь исключение случается когда JVM пытается обратиться к null в том месте где должен был быть obiekt. Чаще всего это случается когда JVM пытается вызвать метод используя obiekt и оказывается что obiekt równa się null. Другие случаи, Jak упоминается в dokumentации Java, могут быть следующими:

    1. Получая доступ к Lub изменяя метод obiektа, который równa się null.
    2. Получая длину массива когда он równa się null.
    3. Получая доступ к Lub меняя obiektы, которые являются заключенными в массив, который równa się null.
    Самый простой способ избежать этого исключения это добавить проверку на неrówna sięство null (далее – проверка на null – прим. переводчика). Поэтому рано Lub поздно разработчик начинает это использовать и тогда проверки на null появляются везде. Интересно что использовать везде проверку на null не считается примером хорошего программирования. Основная причина почему проверка на null используется разработчиками это передавать obiekt null в случаи ошибки. В место этого пример хорошего программирования, который должен пропагандироваться программистами, это передавать пустой obiekt когда stan для главной/рабочей ветви программы не удовлетворяется. Это в свою очередь уменьшило бы количество проверок на null. Все-таки легче говорить нежели применять это на практике.:)

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

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

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

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