Java try ... catch (z przykładami)

W tym samouczku, na przykładach, nauczymy się instrukcji try catch w Javie.

try… catchBlok w Javie służy do wyjątków uchwyt i zapobiega nieprawidłowe zakończenie programu.

Oto składnia try… catchbloku w Javie.

 try( // code ) catch(exception) ( // code )

tryBlok zawiera kod, który może wygenerowania wyjątku.

catchBlok zawiera kod, który jest wykonywany, gdy nie występuje wyjątek wewnątrz trybloku.

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 trybloku.

Kiedy program napotka ten kod, ArithmeticExceptionnastępuje. I wyjątek jest przechwytywany przez catchblok i wykonuje kod wewnątrz catchbloku.

catchBlok jest wykonywany tylko wtedy, gdy istnieje wyjątek wewnątrz trybloku.

Uwaga : w Javie możemy użyć trybloku bez catchbloku. Jednak nie możemy użyć catchbloku bez trybloku.

Java spróbuj… w końcu zablokuj

Możemy również użyć trybloku 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 trybloku razem z finallyblokiem. Widzimy, że kod wewnątrz trybloku powoduje wyjątek.

Jednak kod wewnątrz finallybloku 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… catchbloku. 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, 5a 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ż finallyblok jest zawsze wykonywany, dołączyliśmy kod zamykający PrintWriterwnę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 finallyblok nie jest wykonywany:

  • Stosowanie System.exit()metody
  • W finallybloku występuje wyjątek
  • Śmierć nici

Wiele bloków Catch

Dla każdego trybloku może być zero lub więcej catchbloków. Wiele catchbloków pozwala nam traktować każdy wyjątek inaczej.

Typ argumentu każdego catchbloku 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 arrrozmiaru 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 IndexOutOfBoundExceptionzachodzi.

Gdy w trybloku wystąpi wyjątek ,

  • The exception is thrown to the first catch block. The first catch block does not handle an IndexOutOfBoundsException, so it is passed to the next catch block.
  • The second catch block in the above example is the appropriate exception handler because it handles an IndexOutOfBoundsException. 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.

Interesujące artykuły...