PO Wyjątki - ćwiczenia: Różnice pomiędzy wersjami
Linia 13: | Linia 13: | ||
# Dołącz obsługiwany wyjątek do nowo tworzonego wyjątku ''Exception'' jako przyczynę jego powstania. | # Dołącz obsługiwany wyjątek do nowo tworzonego wyjątku ''Exception'' jako przyczynę jego powstania. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 1)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad1 { | '''public''' '''class''' Zad1 { | ||
'''void''' wypiszDługość(String s) { | '''void''' wypiszDługość(String s) { | ||
Linia 25: | Linia 27: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 2)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad1 { | '''public''' '''class''' Zad1 { | ||
'''void''' wypiszDługość(String s) { | '''void''' wypiszDługość(String s) { | ||
Linia 43: | Linia 46: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 3)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad1 { | '''public''' '''class''' Zad1 { | ||
'''void''' wypiszDługość(String s) { | '''void''' wypiszDługość(String s) { | ||
Linia 62: | Linia 67: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 4)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Tak | Tak | ||
</div> | </div> | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 5)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad1 { | '''public''' '''class''' Zad1 { | ||
'''void''' wypiszDługość(String s) { | '''void''' wypiszDługość(String s) { | ||
Linia 87: | Linia 96: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 6)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad1 { | '''public''' '''class''' Zad1 { | ||
'''void''' wypiszDługość(String s) { | '''void''' wypiszDługość(String s) { | ||
Linia 106: | Linia 117: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie (Część 7)</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad1 { | '''public''' '''class''' Zad1 { | ||
'''void''' wypiszDługość(String s) { | '''void''' wypiszDługość(String s) { | ||
Linia 124: | Linia 136: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
== Zadanie 2 == | == Zadanie 2 == |
Wersja z 20:18, 28 maj 2020
<<< 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