Trochę wiadomości...
wyjątek – mechanizm kontroli przepływu służący do obsługi zdarzeń wyjątkowych
(w szczególności błędów)
Obsługa:
– przechwytywanie wyjątków w odwrotnej kolejności do hierarchii klas (od najbardziej
szczegółowych do najbardziej ogólnych)
try {
//kod generujacy wyjatek
} catch (Exception e) {
//obsluga wyjatkow klasy Exception
} catch (Throwable t) {
//obsluga wyjatkow klasy Throwable
} finally {
//kod zawsze wykonywalny
}
✔ sekcja finally wykonywana jest bez względu na to, czy wyjątek został obsłużony, czy też nie
Generowanie:
– generowanie nowego wyjątku
if (o == null)
throw new NullPointerException();
– ponowne wyrzucanie wyjątku
try {
...
} catch (Exception e) {
...
throw e; //ponowne wyrzucenie
}
Tworzenie:
– rozszerzanie interfejsu klasy bazowej
class MyException extends Exception { }
Specyfikacja:
– specyfikacja wyrzucanych wyjątków, których obsługą zajmie się kod wywołujący metodę
void method() throws IOException { }
✔ metody przeciążone – powinny wyrzucać takie same wyjątki
✔ metody implementujące – nie muszą wyrzucać wyjątków specyfikowanych przez metodę
abstrakcyjną
✔ konstruktory – mogą dodawać nowe wyjątki
Zadania 1. Jako przykłady sytuacji "wyjątkowych" znajdź opisy klas popularnych wyjątków (dziedziczących po Exception): ClassNotFoutdException, ArrayIndexOutOfBoundsException, FileNotFoundException. Zwróć uwagę na nazwy klas wyjątku - samo pojawienie się wyjątku o określonej nazwie opisuje zaistniałą sytuację. 2. Utwórz klasę z metodą main(), która zgłasza obiekt klasy Exception wewnątrz bloku try. Przekaż parametr tekstowy konstruktorowy Exception. Przechwyć wyjątek wewnątrz sekcji catch i wypisz przekazany tekst. Pomocny przykład: SimpleExceptionDemo.java 3. Utwórz własną klasę wyjątków. Napisz dla tej klasy konstruktor przyjmujący parametr typu String i zapamiętujący ten parametr wewnątrz obiektu. Napisz metodę wyświetlającą ten łańcuch. Utwórz blok try-catch i wypróbuj ten wyjątek. Pomocne przykłady: FullConstructors.java, ExtraFeatures.java, ExceptionMethods.java 4. Napisz klasę z metodą, która zgłasza wyjątek stworzony w zad 2. Spróbuj ją skompilować bez specyfikacji wyjątku. Zaobserwuj komunikaty kompilatora. Dodaj odpowiednią specyfikację wyjątku. Wypróbuj swoją klasę i jej wyjątki wewnątrz bloku try-catch. 5. Utwórz klasę z dwiema metodami f() i g(). W g() zgłoś wyjątek nowego, zdefiniowanego przez Ciebie typu. W f() wywolaj g(), przechwyć jej wyjątki i w sekcji catch zgłoś inny wyjątek (innego zdefinowanego przez Ciebie typu). Przetestuj swój kod w main(). 6. Stwórz własny kod wzawiający wykonanie po napotkaniu sytuacji wyjątkowej, który jest powtarzany, dopóki wyjątek nie przestanie być zgłaszany (np. w pętli while). Pomocne przykłady: OnOffSwitch.java i WithFinally.java