Обробка винятків у Java

⚡ Розумний підсумок

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

  • ⚠️ Визначення винятку: Виняток — це подія виконання, яка перериває стандартну послідовність виконання та представлена ​​як об'єкт, що описує умову помилки.
  • 🧯 Спробуйте блок Catch: Огорніть ризикований код всередину блоку try та додайте після нього один або кілька блоків catch для коректного перехоплення певних типів винятків.
  • 🔁 Зрештою, поведінка: Блок finally завжди виконується після try та catch, що робить його ідеальним для закриття файлів, сокетів або звільнення інших системних ресурсів.
  • Ієрархія винятків: Усі винятки успадковуються від Throwable, який розгалужується на Error та Exception, причому RuntimeException охоплює неперевірені випадки, такі як ділення на нуль.
  • 🧪 Кращі практики: Спочатку перехоплюйте найспецифічніший виняток, уникайте порожніх блоків catch, записуйте змістовні повідомлення в журнал та використовуйте multi-catch, щоб код був лаконічним та зручним у підтримці.

Обробка винятків у Java

Що є винятком у Java?

An Виняток у Java — це подія, яка перериває виконання інструкцій програми та порушує нормальний хід виконання програми. Це об'єкт, який огортає інформацію про подію помилки, що сталася в методі, та передається до системи виконання. JavaВинятки в основному використовуються для сигналізації про різні типи помилок, щоб розробники могли реагувати на них контрольованим чином.

Існує дві широкі категорії помилок у Java:

  1. Помилки часу компіляції
  2. Помилки виконання

Помилки під час компіляції можна розділити на два додаткові типи:

  • Синтаксичні помилки
  • Семантичні помилки

Приклад синтаксичних помилок:

Замість декларування int a; ви помилково оголосили це як in a;, для чого компілятор викличе помилку.

Приклад семантичних помилок: Ви оголосили змінну int a; і після кількох рядків коду ви знову оголошуєте ціле число як int a;. Усі ці помилки підсвічуються під час компіляції коду.

Приклад помилок виконання

Помилка виконання називається ВинятокЦе будь-яка подія, яка перериває нормальний потік виконання програми. Приклади винятків включають арифметичний виняток, NullPointerException, виняток ділення на нуль та багато інших. Винятки в Java – це умови, які часто знаходяться поза межами прямого контролю розробника.

Натисніть тут якщо відео недоступне

Навіщо нам потрібна обробка винятків?

Припустимо, ви написали програму для доступу до сервера. Все працює добре, поки ви розробляєтеping код у локальному середовищі з контрольованими умовами.

Java Обробка винятків

Під час фактичного робочого процесу сервер може бути непрацюючим. Коли ваша програма намагається отримати до нього доступ, виникає виняток, і без належної обробки програма раптово завершує свою роботу.

Java Обробка винятків

Як обробити виняток у Java

Досі ми бачили, що виняток часто знаходиться поза контролем розробника. Однак звинувачувати проблеми навколишнього середовища у збоях коду не є реальним рішенням. Вам потрібне надійне програмування, яке враховує виняткові ситуації. Такий код відомий як Обробник винятків.

У нашому прикладі належна обробка винятків означала б, що коли основний сервер не працює, програма автоматично підключається до резервного сервера.

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 забезпечує вбудований механізм обробки винятків, який відокремлює нормальну логіку від логіки відновлення після помилок.

  1. Звичайний код входить в a TRY блок
  2. Код обробки винятків входить до CATCH блок

Спробуйте Catch Block

У нашому прикладі блок TRY міститиме код для підключення до сервера. Блок CATCH міститиме код для підключення до резервного сервера. Якщо сервер працює, код у блоці CATCH буде проігноровано. Якщо сервер не працює, буде викликано виняток, і буде виконано код у блоці catch.

Спробуйте Catch Block

Отже, ось як обробляється виняток у 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) Збережіть, скомпілюйте та запустіть код. Ви отримаєте наступний результат.

Спробуйте Catch Block

Як ви бачите, виняток обробляється, і останній рядок коду також виконується. Також зверніть увагу, що рядок 7 не буде виконано, оскільки як тільки виникає виняток, потік керування переходить до блоку catch.

Примітка: Об'єкт ArithmeticException "e" містить інформацію про виняток, що стався, що може бути корисним під час виконання дій з відновлення.

Java Ієрархія класів винятків

Після виконання одного оператора catch інші пропускаються, і виконання продовжується після блоків try та catch. Вкладені блоки catch повинні дотримуватися ієрархії винятків від найспецифічнішого підкласу до найзагальнішого батьківського класу.

Java Ієрархія винятків

  • Усі виняткові класи в 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 мовчки в багатопотоковому коді, натомість відновлюйте прапорець переривання.

Поширені запитання

Перевірені винятки перевіряються під час компіляції та мають бути оголошені або перехоплені, наприклад, IOException. Неперевірені винятки розширюють RuntimeException, виникають під час виконання та не потребують обов'язкової обробки, наприклад, NullPointerException або ArithmeticException.

Блок finally завжди виконується після блоків try та catch, незалежно від того, чи стався виняток, чи ні. Це найбезпечніше місце для звільнення ресурсів, таких як файлові дескриптори, з'єднання з базою даних або сокети, що забезпечує коректне завершення операцій.

Ключове слово throw використовується всередині методу для фактичного виклику об'єкта винятку, тоді як throws використовується в сигнатурі методу для оголошення того, що метод може передавати певні перевірені винятки своєму викликаючому методу для обробки.

Так. За блоком try може йти блок finally без блоку catch. Цей шаблон використовується, коли розробник хоче забезпечити виконання коду очищення, навіть якщо сам виняток поширюється на викликаючу функцію.

Так. Інструменти спостереження на базі штучного інтелекту аналізують стек tracфайли, журнали та шляхи коду для прогнозування місць, де можуть виникнути винятки під час виконання. Вони пропонують захисні перевірки, рекомендують розміщення перехоплювачів та поверхневі аномалії, допомагаютьping команди запобігають збоям, перш ніж вони потраплять у виробництво.

Асистенти штучного інтелекту аналізують стек traces, співвідносять їх з вихідним кодом та пропонують ймовірні першопричини, а також виправлення. Вони генерують шаблони try catch, рекомендують покращення логування та навіть переписують методи з помилками, що значно скорочує час, який розробники витрачають на діагностику. Java винятки.

Підсумуйте цей пост за допомогою: