В этом руководстве мы узнаем об операторе 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.