Java try ... catch (з прикладами)

У цьому підручнику ми дізнаємося про вираз try catch у Java за допомогою прикладів.

try… catchБлок в Java використовується для виключення рукояток і запобігає аварійне завершення роботи програми.

Ось синтаксис try… catchблоку в Java.

 try( // code ) catch(exception) ( // code )

tryБлок включає в себе код , який може генерувати виняток.

catchБлок включає в себе код , який виконується , коли відбувається виняток всередині tryблоку.

Приклад: Java try… catch block

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )

Вихідні дані

 ArithmeticException => / за нулем

У наведеному вище прикладі зверніть увагу на рядок,

 int divideByZero = 5 / 0;

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

Коли програма зустрічає цей код, ArithmeticExceptionвідбувається. І, виняток ловиться catchблоком і виконує код всередині catchблоку.

catchБлок виконується тільки тоді , коли існує виняток всередині tryблоку.

Примітка : У Java ми можемо використовувати tryблок без catchблоку. Однак ми не можемо використовувати catchблок без tryблоку.

Спробуйте Java … нарешті заблокуйте

Ми також можемо використовувати tryблок разом із блоком нарешті.

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

Приклад: Java спробувати … нарешті заблокувати

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )

Вихідні дані

 Нарешті, блок завжди виконується. Виняток у потоці "main" java.lang.ArithmeticException: / за нулем у Main.main (Main.java:4)

У наведеному вище прикладі ми використовували tryблок разом із finallyблоком. Ми бачимо, що код всередині tryблоку викликає виняток.

Однак код всередині finallyблоку виконується незалежно від винятку.

Спробуйте Java … зловити … нарешті заблокувати

У Java ми також можемо використовувати блок нарешті після try… catchблоку. Наприклад,

 import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )

Вихідні дані

 Введення оператора try Exception => Індекс 5 поза межами довжини 5 Закриття PrintWriter

У наведеному вище прикладі ми створили масив із назвою list та файл із іменем output.txt. Тут ми намагаємося прочитати дані з масиву та зберегти їх у файл.

Зверніть увагу на код,

 for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )

Тут розмір масиву дорівнює, 5а останній елемент масиву дорівнює list(4). Однак ми намагаємось отримати доступ до елементів на a(5) і a(6).

Отже, код генерує виняток, який перехоплюється блоком catch.

Оскільки finallyблок завжди виконується, ми включили код, щоб закрити PrintWriterвсередині блоку нарешті.

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

Примітка : Є деякі випадки, коли finallyблок не виконується:

  • Використання System.exit()методу
  • У finallyблоці виникає виняток
  • Смерть нитки

Кілька блоків лову

Для кожного tryблоку може бути нуль або більше catchблоків. Кілька catchблоків дозволяють нам по-різному обробляти кожен виняток.

Тип аргументу кожного catchблоку вказує на тип виключення, який може ним оброблятися. Наприклад,

 class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )

Вихідні дані

 IndexOutOfBoundsException => Індекс 10 поза межами довжини 10

У цьому прикладі ми створили цілочисельний масив із іменем arrрозміром 10 .

Оскільки індекс масиву починається з 0 , останнім елементом масиву є arr(9). Зверніть увагу на заяву,

 arr(10) = 11;

Тут ми намагаємося присвоїти значення індексу 10 . Отже, IndexOutOfBoundExceptionвідбувається.

Коли в tryблоці виникає виняток ,

  • Виняток викидається в перший catchблок. Перший catchблок не обробляє an IndexOutOfBoundsException, тому він передається наступному catchблоку.
  • Другий catchблок у наведеному вище прикладі є відповідним обробником винятків, оскільки він обробляє файл IndexOutOfBoundsException. Отже, воно виконується.

Виловлювання кількох винятків

З Java SE 7 і пізніших версій тепер ми можемо перехопити більше одного типу винятків за допомогою одного catchблоку.

Це зменшує дублювання коду та підвищує простоту та ефективність коду.

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

Його синтаксис:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )

Щоб дізнатись більше, відвідайте Java, що охоплює кілька винятків.

Інструкція про спробу ресурсів Java

Інструкція try-with-resources - це інструкція try, яка має одне або кілька оголошень ресурсів.

Його синтаксис:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )

Ресурс - це об’єкт, який слід закрити в кінці програми. Він повинен бути оголошений та ініціалізований у операторі try.

Візьмемо приклад.

 try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )

Оператор try-with-resources також називається автоматичним управлінням ресурсами . Це твердження автоматично закриває всі ресурси в кінці виписки.

Щоб дізнатись більше, відвідайте інструкцію java try-with-resources.

Цікаві статті...