Vyhazování výjimek

Datové typy a výjimky v Javě

Jim White

Java Developer

Možnosti ošetření

  • Kontrolované výjimky vyžadují "ošetření"
    • Ošetření běhových výjimek je volitelné
  • Dvě možnosti ošetření
    • Použít try/catch k zachycení Exception a zapsat kód řešení
    • Výjimku "vyhodit"
  • Try/catch je preferovaný způsob ošetření výjimky
    • Není vždy možný – někdy je lepší ošetření centralizovat
Datové typy a výjimky v Javě

Klíčové slovo throws

  • Klíčové slovo throws u metody předá výjimku volající metodě
    • Namísto ošetření výjimky přímo v metodě
    • Nazývá se „vyhození výjimky" nebo „přenesení odpovědnosti"
    • Odpovědnost za ošetření se přenáší na volajícího
  • Za throws uveďte čárkou oddělený seznam typů výjimek
    • Informuje volajícího, jaké výjimky může očekávat
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Datové typy a výjimky v Javě
Příklad throws

Standardní try/catch pro ošetření 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 pro ošetření 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);
}
Datové typy a výjimky v Javě

Kdy použít throws

  • „Přenesení odpovědnosti" či vyhazování výjimek je praxe, které se vyhýbáme
    • Lepší je zpravidla zachytit výjimky tam, kde nastávají
  • Důvody pro throws místo try/catch:
    • Metoda, kde výjimka nastane, nemusí vědět, jak ji řešit
    • Centralizace ošetření za účelem snížení redundantního kódu

Vyhazování výjimek se typicky používá u vlastních výjimek

1 Photo from https://unsplash.com/@philipparosetite
Datové typy a výjimky v Javě

Zachycení a opětovné vyhození

  • Exception lze "znovu vyhodit"
    • Volající metoda také použije throws místo try/catch
  • Opětovné vyhození z main způsobí ukončení aplikace

Výjimky lze znovu vyhodit do volajících metod

Datové typy a výjimky v Javě

Příklad opětovného vyhození

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);
    }
}
Datové typy a výjimky v Javě

Pojďme cvičit!

Datové typy a výjimky v Javě

Preparing Video For Download...