Rzucanie wyjątków

Typy danych i wyjątki w Javie

Jim White

Java Developer

Opcje obsługi wyjątków

  • Wyjątki kontrolowane wymagają "obsługi"
    • Obsługa wyjątków runtime jest opcjonalna
  • Dwie opcje "obsługi"
    • Użycie try/catch do przechwycenia Exception i rozwiązania problemu
    • "Rzucenie" wyjątku
  • Try/catch to preferowany sposób obsługi wyjątków
    • Nie zawsze możliwy – czasem lepiej scentralizować obsługę wyjątków
Typy danych i wyjątki w Javie

Słowo kluczowe throws

  • Użyj throws w metodzie, aby przekazać wyjątek do metody wywołującej
    • Zamiast obsługiwać wyjątek wewnątrz metody
    • Nazywane "rzucaniem wyjątku" lub "przekazywaniem odpowiedzialności"
    • Odpowiedzialność za obsługę przechodzi na metodę wywołującą
  • Po throws użyj listy typów wyjątków oddzielonych przecinkami
    • Wskazuje, jakich wyjątków może oczekiwać metoda wywołująca
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Typy danych i wyjątki w Javie
Przykład throws

Zwykłe try-catch do obsługi Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Oops - trying to get non-existent item");
  }
}

Throws do obsługi Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod tried to get non-existent item");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Typy danych i wyjątki w Javie

Kiedy używać throws

  • "Przekazywanie odpowiedzialności" to praktyka, której zazwyczaj unikamy
    • Lepszą praktyką jest obsługa wyjątków tam, gdzie występują
  • Powody używania throws zamiast try-catch:
    • Metoda może nie wiedzieć, jak odzyskać sprawność po błędzie
    • Centralizacja obsługi w celu uniknięcia redundancji kodu

Rzucanie wyjątku stosuje się zwykle z wyjątkami niestandardowymi

1 Photo from https://unsplash.com/@philipparosetite
Typy danych i wyjątki w Javie

Przechwytywanie i przekazywanie dalej

  • Exception może zostać "przekazana dalej"
    • Metoda wywołująca używa throws zamiast try/catch
  • Przekazanie z main spowoduje zatrzymanie aplikacji

Wyjątki mogą być przekazywane dalej do metod wywołujących

Typy danych i wyjątki w Javie

Przykład przekazywania wyjątku

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Oops - tried a bad quotient");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Typy danych i wyjątki w Javie

Czas na ćwiczenia!

Typy danych i wyjątki w Javie

Preparing Video For Download...