PO Wyjątki - ćwiczenia
<<< Powrót do przedmiotu Programowanie obiektowe
Zadanie 1
Napisz metodę, która jako parametr będzie przyjmowała napis i wypisywała na standardowe wyjście jego długość.
- Przekaż do tej metody null i zobacz, jaki wyjątek został zgłoszony.
- Otocz wywołanie metody blokiem try-catch, przechwyć ten wyjątek i wypisz na standardowe wyjście ślad stosu wywołań z chwili zgłoszenia wyjątku.
- Bezpośrednio po wypisaniu jego śladu zgłoś obsługiwany wyjątek ponownie.
- Czy ślady stosu wypisane przez ciebie w bloku catch i przez maszynę wirtualną w chwili przerwania programu są takie same?
- Przed zgłoszeniem ponownie obsługiwanego wyjątku wykonaj na nim metodę fillInStackTrace().
- Zamiast zgłaszać ponownie obsługiwany wyjątek, zgłoś nowy wyjątek klasy Exception. Zauważ, że wymaga to pewnej dodatkowej zmiany w kodzie.
- Dołącz obsługiwany wyjątek do nowo tworzonego wyjątku Exception jako przyczynę jego powstania.
Rozwiązanie (Część 1)
Rozwiązanie (Część 2)
Rozwiązanie (Część 3)
Rozwiązanie (Część 4)
}}
Rozwiązanie (Część 5)
Rozwiązanie (Część 6)
Rozwiązanie (Część 7)
Zadanie 2
Napisz trzy nowe wyjątki oraz metodę, która za każdym wywołanie będzie losowo zgłaszała jeden z nich.
- Otocz wywołanie tej metody instrukcją try-catch zawierającą po jednym bloku catch dla każdego z wyjątków. Niech każdy blok catch wypisuje, który wyjątek złapała.
- Sprawdź, co się stanie, jeżeli zmienisz kod metody tak, żeby przestała zgłaszać jeden z wyjątków, ale nadal będzie on wymieniony w klauzuli throws nagłówka metody. Czy metody wywołujące napisaną przez ciebie metodę, ale nie obsługujące tego wyjątku będą musiały nadal go wymieniać w swoich nagłówkach?
Rozwiązanie (część 1)
Rozwiązanie (część 2)
Zadanie 3
Napisz program sprawdzający, czy wyjątki zgłoszone w blokach catch mogą być obsłużone przez ten sam blok lub jeden z pozostałych bloków tej samej instrukcji try-catch.
Rozwiązanie
Zadanie 4
W poniższym przykładzie w bloku try jest pięć instrukcji. Każda z nich może zgłosić taki sam wyjątek. Zaproponuj rozwiązanie, które w kodzie obsługi wyjątku pozwoli sprawdzić, w której instrukcji on wystąpił.
public class Zad4 { void możeZgłosićWyjątek() throws Exception { if (new java.util.Random().nextInt(5) == 0) throw new Exception(); } public static void main(String[] args) { Zad4 z = new Zad4(); try { z.możeZgłosićWyjątek(); z.możeZgłosićWyjątek(); z.możeZgłosićWyjątek(); z.możeZgłosićWyjątek(); z.możeZgłosićWyjątek(); } catch (Exception e) { //jakiś kod obsługi } } }
Rozwiązanie
Zadanie 5
Czy deklaracja wyjątków należy do sygnatury metody? Przygotuj przykład, który to rozstrzyga.
Rozwiązanie