JavaRush /Java блог /Random UA /6 Java винятків, які переслідують новачків
gram2005
30 рівень

6 Java винятків, які переслідують новачків

Стаття з групи Random UA
Час від часу я стикаюся з розробниками-новачками, які застрягли на розумінні наступних простих винятків і мені доводиться все заново пояснювати їм. Швидше за все в подібній ситуації виявляється багато досвідчених Java розробників, які допомагають новачкам впоратися з такими винятками. Тому я вирішив написати цю статтю та в майбутньому посилатися на неї. Коментарі та додавання до списку винятків вітаються. 6 Java винятків, які переслідують новачків - 1
  1. NoClassDefFoundError: Це один з тих винятків, які повідомлення Exception in thread “main“ NoClassDefFoundErrorчасто вітає нових розробників у світі Java програмування. Вони пишуть helloworld-програму, йдуть у командний рядок і пишуть " java " - команду для виконання і «БАМ»:-) Через деякий час новачки зрозуміють як виправити цей виняток і побачать як виводитися їх hello world.

    NoClassDefFoundErrorтрапляється тоді, коли віртуальна машина Java (JVM) намагається отримати доступ до класу під час виконання і цей клас не знаходиться, хоча той же клас знаходився під час компіляції. Найчастіше це виняток трапляється під час запуску Java програми через команду “java“ з неправильним значенням параметра classpath. [ Classpath– це параметр, який задається через командний рядок або через змінну оточення, що вказує на віртуальну Java машину або Java компілятор де шукати класи або пакети оголошені користувачем – прим. перекладача] Можливі причини виключення:

    • Клас недоступний у Classpath.
    • Часто скрипт, який виконується під час запуску операційної системи, змінює значення змінної оточенню classpath. Це можна перевірити, виконавши команду “ set” у командному рядку у Windows та переглянувши чи включено визначення класу до значення classpath. За бажання подальше вивчення цього виключення можна продовжити у блозі Javarevisited .
  2. ClassNotFoundException: Виняток ClassNotFoundExceptionце ще один виняток, через який новачкам, які тільки починають програмувати на Java, сняться кошмари Цікаво, що для середнього розробника потрібно деякий час, щоб перестати плутати ClassNotFoundExceptionі NoClassDefFoundErrorміж собою. І тому питання про різницю цих двох винятків залишається одним із найчастіше поставлених на співбесіді на позицію junior Java розробника.
    ClassNotFoundExceptionтрапляється коли JVM намагається завантажити певний клас і не виявляє такого ж classpath. Зазвичай новачки стикаються з цим у коді, який підключається до бази даних, використовуючи JDBC бібліотеку. Намагаючись завантажити драйвер за допомогою наступного коду Class.forName( “JDBCdriver”). Хороший матеріал ClassNotFoundExceptionможна знайти тут. Також рекомендується ознайомитися і зрозуміти концепцію завантажувачів класів Java, щоб ефективно справлятися з цим винятком. Ви, можливо, захочете подивитися наступну сторінку про те, як налаштувати classpath в оточеннях Win/Unix . А так, як випливає з документації Java, цей виняток трапляється в таких випадках:

    1. Коли намагаються завантажити клас, використовуючи метод Class.forNameі файл .classне існує в classpath. Це найчастіший випадок із усіх трьох.
    2. Коли завантажувач класу намагається завантажити клас за допомогою методу loadClass.
    3. Коли завантажувач класу намагається завантажити клас за допомогою findSystemClass.
  3. NullPointerException: виняток NullPointerExceptionзрозуміти легше і новачки з ним справляються швидше ніж з двома попередніми У той же час причину виключення дуже легко знайти, оскільки наводиться номер рядка, де воно сталося. Насамперед виняток трапляється коли JVM намагається звернутися до null там де повинен був бути об'єкт. Найчастіше це трапляється коли JVM намагається викликати метод використовуючи об'єкт і виявляється, що об'єкт дорівнює null. Інші випадки, як згадується в документації Java, можуть бути такими:

    1. Отримуючи доступ до або змінюючи метод об'єкта, який дорівнює null.
    2. Отримуючи довжину масиву коли він дорівнює null.
    3. Отримуючи доступ до або змінюючи об'єкти, які є ув'язненими в масив, який дорівнює null.
    Найпростіший спосіб уникнути цього виключення це додати перевірку на нерівність null(далі – перевірка на null – прим. перекладача). Тому рано чи пізно розробник починає використовувати це і тоді перевірки на null з'являються скрізь. Цікаво, що використовувати скрізь перевірку nullне вважається прикладом хорошого програмування. Основна причина чому перевірка на nullвикористовується розробниками це передавати об'єкт nullу випадки помилки. У місці цього приклад хорошого програмування, який повинен пропагуватися програмістами, це передавати порожній об'єкт, коли умова для головної/робочої гілки програми не задовольняється. Це своє чергу зменшило б кількість перевірок на null. Все-таки легше говорити, ніж застосовувати це на практиці.

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

  5. ArrayIndexOutOfBoundsException: назва цього винятку говорить сама за себе Воно трапляється, коли JVM намагається отримати доступ до елемента масиву використовуючи невірний індекс, наприклад, негативний (-1) або більший або рівний розміру масиву. Його легко зрозуміти, знайти причину та виправити. Наступний приклад коду допоможе уникнути цього виключення: for( index = 0; index < array.length; index++ )
    Зверніть увагу, що індекс починається з 0 і зростає до величини на 1 менше розміру масиву.

  6. IllegalArgumentException: Це виняток найпростіше, його легко зрозуміти, знайти його причину та виправити Воно відбувається коли JVM намагається передати методу невідповідний аргумент або аргумент неправильного типу.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ