ZPOB_2016SL_LAB_04

Transkrypt

ZPOB_2016SL_LAB_04
IV. Wyjątki
Zadanie 1. Zapoznaj się z plikiem źródłowym Exceptions.java. Upewnij się, że dobrze rozumiesz każdą z linii kodu, a następnie skompiluj ten plik
i wywołaj klasę Exceptions. Sprawdź, jak zachowuje się program, gdy wywołasz go z różną liczbą argumentów (0, 2 lub 5). Czy wszystkie wywołania
zakończyły się powodzeniem?
Zadanie 2. Dowiedz się, jaka idea stoi za wyjątkami w języku Java i czym
te wyjątki są. W szczególności zwróć uwagę na hierarchię między klasami
Object, Throwable, Exception, RuntimeException, IndexOutOfBoundsException oraz ArrayIndexOutOfBoundsException.
Zadanie 3. Zmodyfikuj metodę push w klasie Stack tak, aby w momencie,
gdy użytkownik spróbuje dodać element do pełnego stosu, rzucała ona wyjątek (obiekt) klasy RuntimeException. Użyj słowa kluczowego throw,
np.
RuntimeException wyjatek = new RuntimeException(”Stos␣pelny.”);
throw wyjatek;
W jaki sposób zmieniło się działanie programu? Czy powyższy kod można
skrócić? Jak?
Zadanie 4. Korzystając z konstrukcji try-catch, przechwyć w metodzie
main klasy Exceptions potencjalny wyjątek rzucany przez metodę push
klasy Stack. Zainspiruj się kodem:
try {
myStack.push(a);
} catch(RuntimeException e) {
System.out.println(”Blad:␣” + e.getMessage());
}
Poświęć na zrozumienie rozwiązania tego zadania tak wiele czasu, jak potrzebujesz. Skorzystaj z dodatkowych materiałów, jeśli jest to niezbędne. Upewnij się, że wszystko jest jasne, zanim przejdziesz do wykonywania kolejnego
zadania.
Zadanie 5. Dowiedz się, co to znaczy, że wyjątek jest kontrolowany lub
niekontrolowany. Do której kategorii należą wyjątki klasy RuntimeException, obsługiwane przez nas do tej pory? A wyjątki klasy Exception?
1
Zadanie 6. Zapoznaj się z kodem źródłowym w pliku ControlledException.java. Jakiego typu wyjątek zwraca teraz metoda push? Co oznacza
fragment throws Exception w deklaracji tej metody? Spróbuj skompilować ten plik — czy jest to możliwe? Uzupełnij kod o obsługę tego wyjątku
w metodzie main klasy ControlledException. Czy teraz można skompilować program? Dlaczego?
Zadanie 7. Utwórz klasy wyjątków kontrolowanych FullStackException oraz EmptyStackException, dziedziczące po klasie Exception.
W obu klasach przesłoń metodę getMessage klasy Throwable. Dlaczego
jest to możliwe? Jak można utworzyć własne klasy wyjątków niekontrolowanych?
Zadanie 8. Wykorzystaj klasy wyjątków utworzone w poprzednim zadaniu
w implementacji metod push i pop klasy Stack. Zdecyduj, czy powinny
pozostać kontrolowane, czy nie. Jakie są argumenty za każdym z rozwiązań,
a jakie przeciw?
2