Wyjątki Java — spróbuj... Przechwyć


Wyjątki Java

Podczas wykonywania kodu Java mogą wystąpić różne błędy: błędy w kodowaniu popełnione przez programistę, błędy spowodowane nieprawidłowymi danymi wejściowymi lub inne nieprzewidywalne rzeczy.

Gdy wystąpi błąd, Java zwykle zatrzymuje się i generuje komunikat o błędzie. Terminem technicznym na to jest: Java zgłosi wyjątek (zgłosi błąd).


Java spróbuj i złap

Instrukcja tryumożliwia zdefiniowanie bloku kodu, który ma być testowany pod kątem błędów podczas jego wykonywania.

Instrukcja catchumożliwia zdefiniowanie bloku kodu, który ma zostać wykonany, jeśli wystąpi błąd w bloku try.

Słowa kluczowe i występują tryw catchparach:

Składnia

try {
  //  Block of code to try
}
catch(Exception e) {
  //  Block of code to handle errors
}

Rozważmy następujący przykład:

Spowoduje to wygenerowanie błędu, ponieważ myNumbers[10] nie istnieje.

public class Main {
  public static void main(String[ ] args) {
    int[] myNumbers = {1, 2, 3};
    System.out.println(myNumbers[10]); // error!
  }
}

Wynik będzie wyglądał mniej więcej tak:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Main.main(Main.java:4)

Jeśli wystąpi błąd, możemy użyć try...catchdo przechwycenia błędu i wykonania kodu, który go obsłuży:

Przykład

public class Main {
  public static void main(String[ ] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

Wynikiem będą:

Something went wrong.

Wreszcie

Instrukcja finallyumożliwia wykonanie kodu po try...catch, niezależnie od wyniku:

Przykład

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

Wynikiem będą:

Something went wrong.
The 'try catch' is finished.


Słowo kluczowe rzut

Oświadczenie throwpozwala na stworzenie niestandardowego błędu.

Instrukcja throwjest używana razem z typem wyjątku . W Javie dostępnych jest wiele typów wyjątków: ArithmeticException, FileNotFoundException, ArrayIndexOutOfBoundsException, SecurityException, itd.:

Przykład

Zrzuć wyjątek, jeśli masz mniej niż 18 lat (drukuj „Odmowa dostępu”). Jeśli masz ukończone 18 lat, wydrukuj „Przyznano dostęp”:

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    }
    else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // Set age to 15 (which is below 18...)
  }
}

Wynikiem będą:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
        at Main.checkAge(Main.java:4)
        at Main.main(Main.java:12)

Jeśli miałbyś 20 lat , nie miałbyś wyjątku:

Przykład

checkAge(20);

Wynikiem będą:

Access granted - You are old enough!

Sprawdź się za pomocą ćwiczeń

Ćwiczenie:

Wstaw brakujące części, aby obsłużyć błąd w poniższym kodzie.

 {
  int[] myNumbers = {1, 2, 3};
  System.out.println(myNumbers[10]);
}  (Exception e) {
  System.out.println("Something went wrong.");
}