Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Wyjątki mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019
Spis treści Wyjątki... 3 2
Wyjątki Podczas pracy programu mogą wystąpić sytuacje, które nie zostały przewidziane przez programistę (np. nietypowy zestaw danych, brak dostępu do zasobu). Zwykle w takiej sytuacji program kończy swoje działanie, a użytkownik otrzymuje niewiele mówiąc komunikat, sugerujący wystąpienie błędu. Uniknięcie takiej sytuacji możliwe jest dzięki blokowi try catch. public static void main(string[] args) { Kod z blokiem try catch. catch (Exception e) { Jak można zauważyć, zastosowanie bloku try catch sprawiło, że aplikacja nie zakończyła swojego działania po wystąpieniu wyjątku. Ogólna zasada mówi, że jeśli nie uda się zrealizować akcji, zawartej w bloku try, następuje wykonanie kodu z bloku catch. Kod z tego bloku (catch) nie jest wykonywany, gdy nie wystąpił wyjątek. 3
System.out.println(array[4]); catch (Exception e) { Istnieje możliwość dodania bloku finally. Zawarte będą w nim instrukcje, które zostaną wykonane zawsze, niezależnie od tego, czy wystąpił wyjątek. System.out.println(array[4]); catch (Exception e) { finally { System.out.println("Blok finally"); catch (Exception e) { finally { System.out.println("Blok finally"); Możemy przechwycić kilku różnych wyjątków w jednym bloku try. 4
catch (NullPointerException e) { System.out.println("Wystąpił NPE"); catch (ArrayIndexOutOfBoundsException a) { System.out.println("Wystąpił ArrayIndexOutOfBoundsException"); System.out.println(a.getLocalizedMessage()); W powyższym przykładzie obsłużono 2 różne wyjątki. Dodatkowo wyświetlona została wiadomość, informująca o przyczynie występowania wyjątku. W języku Java możemy wyróżnić 2 rodzaje wyjątków: checked (kontrolowane) i unchecked (niekontrolowane). Wyjątki typu unchecked nie muszą być jawnie obsługiwane w kodzie programu przez programistę. Należą one do klas dziedziczących po klasach Error oraz RuntimeException. RuntimeException dziedziczy po klasie Exception, jednak ze względu na specyfikę tych wyjątków, zaliczane są one do grupy niekontrolowanych. W przypadku wyjątków tego typu, po stronie programisty znajduje się zapewnienie, że wyjątek nie zatrzyma wykonywania programu. Wyjątki typu checked wymagają obsłużenia przez programistę. Tę grupę stanowią wyjątki, które dziedziczą po klasie Exception. Obsługa wyjątków tego typu, polega dodaniu słowa kluczowego throws oraz nazwy wyjątku w deklaracji metody, w której może on wystąpić. Dodatkowo, w ciele metody należy użyć słowa kluczowego throw. W języku Java istnieje możliwość utworzenia własnego wyjątku. public class MyException extends Exception { public MyException(String message) { super(message); Obsługa wyjątku: public int extest() throws MyException { throw new MyException("Wystąpienie własnego wyjątku"); 5
Zastosowanie bloku try catch dla wyjątku: public static void main(string[] args) { OperationHelper operationhelper = new OperationHelper(); operationhelper.extest(); catch (MyException e) { System.out.println(e.getMessage()); 6