Wykład ćwiczenia


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