W tym samouczku, na przykładach, nauczymy się instrukcji try catch w Javie.
try… catch
Blok w Javie służy do wyjątków uchwyt i zapobiega nieprawidłowe zakończenie programu.
Oto składnia try… catch
bloku w Javie.
try( // code ) catch(exception) ( // code )
try
Blok zawiera kod, który może wygenerowania wyjątku.
catch
Blok zawiera kod, który jest wykonywany, gdy nie występuje wyjątek wewnątrz try
bloku.
Przykład: blok Java try… catch
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()); ) ) )
Wynik
ArithmeticException => / o zero
W powyższym przykładzie zwróć uwagę na linię,
int divideByZero = 5 / 0;
Tutaj próbujemy podzielić liczbę przez zero . W takim przypadku występuje wyjątek. Dlatego umieściliśmy ten kod wewnątrz try
bloku.
Kiedy program napotka ten kod, ArithmeticException
następuje. I wyjątek jest przechwytywany przez catch
blok i wykonuje kod wewnątrz catch
bloku.
catch
Blok jest wykonywany tylko wtedy, gdy istnieje wyjątek wewnątrz try
bloku.
Uwaga : w Javie możemy użyć try
bloku bez catch
bloku. Jednak nie możemy użyć catch
bloku bez try
bloku.
Java spróbuj… w końcu zablokuj
Możemy również użyć try
bloku razem z blokiem końcowym.
W takim przypadku ostatni blok jest zawsze wykonywany, niezależnie od tego, czy w bloku try jest wyjątek, czy nie.
Przykład: Java try… Wreszcie blok
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Wynik
Ostatecznie blok jest zawsze wykonywany. Wyjątek w wątku "main" java.lang.ArithmeticException: / o zero w Main.main (Main.java:4)
W powyższym przykładzie użyliśmy try
bloku razem z finally
blokiem. Widzimy, że kod wewnątrz try
bloku powoduje wyjątek.
Jednak kod wewnątrz finally
bloku jest wykonywany niezależnie od wyjątku.
Java spróbuj… złap… wreszcie zablokuj
W Javie możemy również użyć ostatniego bloku po try… catch
bloku. Na przykład,
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(); ) )
Wynik
Wprowadzanie instrukcji try Exception => Indeks 5 poza zakresem dla długości 5 Zamykanie PrintWriter
W powyższym przykładzie utworzyliśmy tablicę o nazwie list i plik o nazwie output.txt. Tutaj próbujemy odczytać dane z tablicy i zapisać do pliku.
Zwróć uwagę na kod,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Tutaj rozmiar tablicy to, 5
a ostatni element tablicy to list(4)
. Jednak próbujemy uzyskać dostęp do elementów w a(5)
i a(6)
.
W związku z tym kod generuje wyjątek, który jest przechwytywany przez blok catch.
Ponieważ finally
blok jest zawsze wykonywany, dołączyliśmy kod zamykający PrintWriter
wnętrze ostatniego bloku.
Dobrą praktyką jest użycie final block, aby dołączyć ważny kod czyszczący, taki jak zamknięcie pliku lub połączenia.
Uwaga : w niektórych przypadkach finally
blok nie jest wykonywany:
- Stosowanie
System.exit()
metody - W
finally
bloku występuje wyjątek - Śmierć nici
Wiele bloków Catch
Dla każdego try
bloku może być zero lub więcej catch
bloków. Wiele catch
bloków pozwala nam traktować każdy wyjątek inaczej.
Typ argumentu każdego catch
bloku wskazuje typ wyjątku, który może być przez niego obsłużony. Na przykład,
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(); ) )
Wynik
IndexOutOfBoundsException => Indeks 10 poza zakresem dla długości 10
W tym przykładzie utworzyliśmy tablicę liczb całkowitych o nazwie arr
rozmiaru 10 .
Ponieważ indeks tablicy zaczyna się od 0 , ostatni element tablicy to arr(9)
. Zwróć uwagę na oświadczenie,
arr(10) = 11;
Tutaj próbujemy przypisać wartość indeksowi 10 . Stąd IndexOutOfBoundException
zachodzi.
Gdy w try
bloku wystąpi wyjątek ,
- 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
Instrukcja try-with-resources to instrukcja try, która ma jedną lub więcej deklaracji zasobów.
Jego składnia to:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Zasób to obiekt, który ma zostać zamknięty po zakończeniu programu. Musi zostać zadeklarowana i zainicjowana w instrukcji try.
Weźmy przykład.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Instrukcja try-with-resources jest również nazywana automatycznym zarządzaniem zasobami . Ta instrukcja automatycznie zamyka wszystkie zasoby na końcu instrukcji.
Aby dowiedzieć się więcej, odwiedź instrukcję java try-with-resources.