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блок вместе с блоком finally.

В этом случае блок finally всегда выполняется независимо от того, есть ли исключение внутри блока try или нет.

Пример: Java try… finally block

 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 мы также можем использовать блок finally после 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.

Рекомендуется использовать блок finally для включения важного кода очистки, такого как закрытие файла или соединения.

Примечание . В некоторых случаях finallyблок не выполняется:

  • Использование System.exit()метода
  • Исключение происходит в finallyблоке
  • Смерть нити

Несколько блоков Catch

Для каждого 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блок не обрабатывает объект 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.

Интересные статьи...