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