Обробка винятків у Java
⚡ Розумний підсумок
Java Обробка винятків забезпечує структурований механізм для керування помилками під час виконання, які порушують нормальний хід програми. Вона використовує ключові слова try, catch, finally, throw та throws для виявлення, ізоляції та відновлення після виняткових умов, зберігаючи при цьому...ping надійні та передбачувані програми.

Що є винятком у Java?
An Виняток у Java — це подія, яка перериває виконання інструкцій програми та порушує нормальний хід виконання програми. Це об'єкт, який огортає інформацію про подію помилки, що сталася в методі, та передається до системи виконання. JavaВинятки в основному використовуються для сигналізації про різні типи помилок, щоб розробники могли реагувати на них контрольованим чином.
Існує дві широкі категорії помилок у Java:
- Помилки часу компіляції
- Помилки виконання
Помилки під час компіляції можна розділити на два додаткові типи:
- Синтаксичні помилки
- Семантичні помилки
Приклад синтаксичних помилок:
Замість декларування int a; ви помилково оголосили це як in a;, для чого компілятор викличе помилку.
Приклад семантичних помилок: Ви оголосили змінну int a; і після кількох рядків коду ви знову оголошуєте ціле число як int a;. Усі ці помилки підсвічуються під час компіляції коду.
Приклад помилок виконання
Помилка виконання називається ВинятокЦе будь-яка подія, яка перериває нормальний потік виконання програми. Приклади винятків включають арифметичний виняток, NullPointerException, виняток ділення на нуль та багато інших. Винятки в Java – це умови, які часто знаходяться поза межами прямого контролю розробника.
Натисніть тут якщо відео недоступне
Навіщо нам потрібна обробка винятків?
Припустимо, ви написали програму для доступу до сервера. Все працює добре, поки ви розробляєтеping код у локальному середовищі з контрольованими умовами.
Під час фактичного робочого процесу сервер може бути непрацюючим. Коли ваша програма намагається отримати до нього доступ, виникає виняток, і без належної обробки програма раптово завершує свою роботу.
Як обробити виняток у Java
Досі ми бачили, що виняток часто знаходиться поза контролем розробника. Однак звинувачувати проблеми навколишнього середовища у збоях коду не є реальним рішенням. Вам потрібне надійне програмування, яке враховує виняткові ситуації. Такий код відомий як Обробник винятків.
У нашому прикладі належна обробка винятків означала б, що коли основний сервер не працює, програма автоматично підключається до резервного сервера.
Щоб реалізувати це, ви можете написати код для підключення до сервера, використовуючи традиційні умови if та else. Ви перевірите, чи сервер не працює, і якщо так, ви напишете код для підключення до резервного сервера. Така організація коду з використанням гілок "if" та "else" неефективна, коли ваш код має кілька Java Винятки витримати.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Спробуйте Catch Block у Java
Java забезпечує вбудований механізм обробки винятків, який відокремлює нормальну логіку від логіки відновлення після помилок.
- Звичайний код входить в a TRY блок
- Код обробки винятків входить до CATCH блок
У нашому прикладі блок TRY міститиме код для підключення до сервера. Блок CATCH міститиме код для підключення до резервного сервера. Якщо сервер працює, код у блоці CATCH буде проігноровано. Якщо сервер не працює, буде викликано виняток, і буде виконано код у блоці catch.
Отже, ось як обробляється виняток у Java.
Синтаксис для використання try та catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Приклад блоку Try Catch
Крок 1) Скопіюйте наступний код у редактор.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Крок 2) Збережіть файл та скомпілюйте код. Запустіть програму за допомогою команди java. JavaВиняток.
Крок 3) Арифметичний виняток, ділення на нуль, відображається для рядка 5, а рядок 6 ніколи не виконується.
Крок 4) Тепер давайте розглянемо, як try та catch допоможуть нам обробити цей виняток. Ми помістимо рядок коду, що викликає виняток, у намагатися блок, а потім a зловити блокувати. Скопіюйте наступний код у редактор.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Крок 5) Збережіть, скомпілюйте та запустіть код. Ви отримаєте наступний результат.
Як ви бачите, виняток обробляється, і останній рядок коду також виконується. Також зверніть увагу, що рядок 7 не буде виконано, оскільки як тільки виникає виняток, потік керування переходить до блоку catch.
Примітка: Об'єкт ArithmeticException "e" містить інформацію про виняток, що стався, що може бути корисним під час виконання дій з відновлення.
Java Ієрархія класів винятків
Після виконання одного оператора catch інші пропускаються, і виконання продовжується після блоків try та catch. Вкладені блоки catch повинні дотримуватися ієрархії винятків від найспецифічнішого підкласу до найзагальнішого батьківського класу.
- Усі виняткові класи в Java розширити клас Throwable. Throwable має два підкласи: Error та Exception.
- Клас Error визначає винятки або проблеми, які не очікуються за нормальних обставин у вашій програмі, наприклад, помилка пам'яті, помилка обладнання або помилка JVM.
- Клас Exception представляє винятки, які може обробити ваша програма, і ваша програма може відновитися після цих винятків за допомогою блоків try та catch.
- RuntimeException є підкласом класу Exception. Винятки цього типу представляють собою неперевірені винятки, які виникають під час виконання та не можуть бути виявлені під час компіляції. Гарними прикладами є виняток ділення на нуль та виняток нульового вказівника.
- Виняток IOException генерується під час операцій введення та виведення.
- Перерваний виняток у Java генерується під час багатопотокових операцій, коли потік переривається.
Приклад: Вкладеність блоків try та catch
Крок 1) Скопіюйте наступний код у редактор.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Крок 2) Збережіть файл та скомпілюйте код. Запустіть програму за допомогою команди Ява JavaВиняток.
Крок 3) Генерується виняток ArrayIndexOutOfBoundsException. Змініть значення int d на 0. Збережіть, скомпілюйте та запустіть код.
Крок 4) Має бути згенеровано виняток ArithmeticException.
Крок 5) Розкоментуйте рядок 10 до рядка 12. Збережіть, скомпілюйте та запустіть код.
Крок 6) Помилка компіляції? Це пояснюється тим, що Exception є базовим класом ArithmeticException. Будь-який виняток, викликаний ArithmeticException, також може бути оброблений класом Exception. Таким чином, блок catch ArithmeticException ніколи не матиме можливості виконатися, що робить його зайвим. Звідси й помилка компіляції.
Java Нарешті Блок
Останній блок є виконується незалежно від викликаного винятку у блоці спроби. Це є необов'язковий для використання з блоком try. Блок finally – це правильне місце для звільнення ресурсів, таких як підключення до бази даних, файли або мережеві сокети.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Якщо у блоці try виникає виняток, блок finally виконується після завершення блоку catch.
Приклад блоку finally
Крок 1) Скопіюйте наступний код у редактор.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Крок 2) Збережіть, скомпілюйте та запустіть код.
Крок 3) Очікуваний результат: Блок finally виконується, навіть якщо виникає виняток.
Крок 4) Змініть значення змінної d = 1. Збережіть, скомпілюйте та запустіть код, а потім перегляньте результат.
Найкращі практики для Java Обробка винятків
Дотримання кількох перевірених правил допоможе вам зберегти Java код стійкий, читабельний та простий у налагодженні:
- Спочатку перехоплюйте найспецифічніший виняток, а потім більш загальні, щоб зберегти цілісність ієрархії винятків.
- Уникайте порожніх блоків catch. Як мінімум, зареєструйте виняток, щоб ніколи не загубити першопричину.
- Використовуйте блок finally або try з ресурсами, щоб звільнити файли, сокети та підключення до бази даних.
- Викидайте перевірені винятки лише тоді, коли викликаюча сторона може обґрунтовано відновитися, та використовуйте неперевірені винятки для помилок програмування.
- Обгорніть низькорівневі винятки у змістовний бізнес-виняток, щоб зберегти конфіденційність APItracчистий.
- Ніколи не ковтайте InterruptedException мовчки в багатопотоковому коді, натомість відновлюйте прапорець переривання.







