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

Що таке винятки в Java?

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

Є два види помилок:

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

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

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

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

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

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

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

Помилка виконання називається an винятки помилка. Це будь-яка подія, яка перериває нормальний хід виконання програми. Прикладами винятків є арифметичні винятки, винятки Nullpointer, винятки Divide by zero тощо. Винятки в Java є чимось, що знаходиться поза контролем розробників.

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

Навіщо нам Exception?

Припустимо, ви закодували програму для доступу до сервера. Усе працювало добре, поки ви розробляли код.

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

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

Спробуйте Catch Block

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

Спробуйте Catch Block

Отже, ось як обробляється виняток Java.

Синтаксис використання try & catch

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Приклад

Крок 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 and catch допоможе нам впоратися з цим винятком. Ми помістимо виняток, що спричиняє рядок коду, у a намагатися блок, а потім 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.

Примітка: Об’єкт AritmeticException «e» містить інформацію про виняткову ситуацію, яка сталася, що може бути корисним для виконання дій відновлення.

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

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


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

  • Усі виняткові класи в Java розширити клас Throwable. Throwable має два підкласи, Error і Exception
  • Клас Error визначає винятки або проблеми, які не очікуються за звичайних обставин нашою програмою, наприклад, помилка пам’яті, апаратна помилка, помилка JVM тощо
  • Клас Exception представляє винятки, які може обробляти наша програма, і нашу програму можна відновити від цього винятку за допомогою блоку try and catch
  • Виняток часу виконання є підкласом класу винятків. Винятки цього типу представляють винятки, які виникають під час виконання та які не можна відстежити під час компіляції. Чудовим прикладом того ж є виняток ділення на нуль, виняток нульового покажчика тощо
  • Виняток IO генерується під час операцій введення та виведення
  • Перервані винятки в 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 Exception. Будь-який виняток, викликаний ArithmeticException, також може бути оброблений класом Exception. Тому блок catch ArithmeticException ніколи не матиме шансу на виконання, що робить його зайвим. Звідси помилка компіляції.

Java Нарешті Блок

Останній блок є виконується незалежно від викликаного винятку у блоці спроби. Це є необов'язковий для використання з блоком спроби.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

У випадку, якщо в блоці try виникає виняток, блок finally виконується після виконання блоку catch.

Приклад

Крок 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) Очікуваний результат. Остаточний блок виконується, навіть якщо виникає виняток.

Крок 4) Змініть значення змінної d = 1. Збережіть, скомпілюйте та запустіть код і спостерігайте за результатом. Нижня частина форми

Підсумки

  • An Винятком є ​​помилка під час виконання що перериває нормальний потік виконання програми. Зрив під час виконання програми називається помилкою або винятком.
  • Помилки поділяються на дві категорії
    • Помилки часу компіляції – синтаксичні помилки, семантичні помилки
    • Помилки виконання - Виняток
  • A надійна програма повинна обробляти всі винятки і продовжити звичайний потік виконання програми. Java забезпечує вбудований винятковий метод обробки
  • Обробник винятків - це набір коду, який обробляє виняток. Винятки можуть бути оброблені в Java за допомогою спроби й зловити.
  • Спробуйте заблокувати: Звичайний код містить цей блок.
  • Ловити блок: якщо є помилка в звичайному коді, вона потрапляє в цей блок