В този урок ще научим за опита на catch 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"); ) ) )
Изход
И накрая, блокът винаги се изпълнява.
В горния пример използвахме try
блока заедно с finally
блока. Виждаме, че кодът вътре в try
блока причинява изключение.
Кодът вътре в finally
блока обаче се изпълнява независимо от изключението.
Опит на Java … хващане … накрая блокиране
В Java можем да използваме и блока final след 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(); ) )
Изход
Въвеждане на изявление за опит Изключение => Индекс 5 извън границите за дължина 5 Затваряне на PrintWriter
В горния пример създадохме масив с име списък и файл с име 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
В този пример създадохме цяло число масив с име 10arr
с размер .
Тъй като индексът на масива започва от 0 , последният елемент на масива е в arr(9)
. Забележете изявлението,
arr(10) = 11;
Тук се опитваме да присвоим стойност на индекс 10 . Следователно, IndexOutOfBoundException
настъпва.
Когато възникне изключение в try
блока,
- The exception is thrown to the first
catch
block. The firstcatch
block does not handle anIndexOutOfBoundsException
, so it is passed to the nextcatch
block. - The second
catch
block in the above example is the appropriate exception handler because it handles anIndexOutOfBoundsException
. Hence, it is executed.
Catching Multiple Exceptions
From Java SE 7 and later, we can now catch more than one type of exception with one catch
block.
This reduces code duplication and increases code simplicity and efficiency.
Each exception type that can be handled by the catch
block is separated using a vertical bar |
.
Its syntax is:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
To learn more, visit Java catching multiple exceptions.
Java try-with-resources statement
В опит-с-ресурси твърдението е изявление пробвам, която има една или повече декларации ресурси.
Синтаксисът му е:
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 )
В опит-с-ресурси изявлението също така се нарича автоматично управление на ресурсите . Това изявление автоматично затваря всички ресурси в края на изявлението.
За да научите повече, посетете изявлението java try-with-resources.