PO Wyjątki c.d. - ćwiczenia: Różnice pomiędzy wersjami
(Nie pokazano 6 wersji utworzonych przez 2 użytkowników) | |||
Linia 7: | Linia 7: | ||
'''break''' i '''continue'''. | '''break''' i '''continue'''. | ||
{{rozwiazanie|||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
'''import''' java.io.IOException; | '''import''' java.io.IOException; | ||
Linia 49: | Linia 51: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
== Zadanie 2 == | == Zadanie 2 == | ||
Linia 66: | Linia 68: | ||
} | } | ||
{{rozwiazanie|||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' ZwalnianieZasobów4 { | '''public''' '''class''' ZwalnianieZasobów4 { | ||
'''public''' '''static''' '''void''' main(String[] args) '''throws''' Exception { | '''public''' '''static''' '''void''' main(String[] args) '''throws''' Exception { | ||
Linia 103: | Linia 107: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
== Zadanie 3 == | == Zadanie 3 == | ||
Sprawdź, czy '''finally''' jest wykonywane pomimo wystąpienia wyjątku w bloku '''catch''' z tej samej instrukcji? | Sprawdź, czy '''finally''' jest wykonywane pomimo wystąpienia wyjątku w bloku '''catch''' z tej samej instrukcji? | ||
{{rozwiazanie|||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
Tak, pokazuje to poniższy przykład. | Tak, pokazuje to poniższy przykład. | ||
'''public''' '''class''' Zad3 { | '''public''' '''class''' Zad3 { | ||
Linia 123: | Linia 129: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
== Zadanie 4 == | == Zadanie 4 == | ||
Napisz klasę, której konstruktor zgłasza wyjątek. W metodzie ''main()'' utwórz egzemplarz tej klasy i obsłuż wyjątek. | Napisz klasę, której konstruktor zgłasza wyjątek. W metodzie ''main()'' utwórz egzemplarz tej klasy i obsłuż wyjątek. | ||
{{rozwiazanie|||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
'''public''' '''class''' Zad44 { | '''public''' '''class''' Zad44 { | ||
Zad4() '''throws''' Exception { | Zad4() '''throws''' Exception { | ||
Linia 143: | Linia 151: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
== Zadanie 5 == | == Zadanie 5 == | ||
Sprawdź, czy konstruktor podklasy nie może obsłużyć wyjątków zgłaszanych przez konstruktor nadklasy. Napisz przykładowy kod pokazujący, że konstruktor nadklasy jest wykonywany wcześniej niż wskazuje na to umiejscowienie słowa '''super''' w konstruktorze podklasy. | Sprawdź, czy konstruktor podklasy nie może obsłużyć wyjątków zgłaszanych przez konstruktor nadklasy. Napisz przykładowy kod pokazujący, że konstruktor nadklasy jest wykonywany wcześniej niż wskazuje na to umiejscowienie słowa '''super''' w konstruktorze podklasy. | ||
{{rozwiazanie|(część 1)||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie|(część 1)|| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
'''class''' Nadklasa1 { | '''class''' Nadklasa1 { | ||
Nadklasa1() '''throws''' Exception {} | Nadklasa1() '''throws''' Exception {} | ||
Linia 172: | Linia 182: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> | ||
{{rozwiazanie|(część 2)||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie|(część 2)|| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
'''class''' Nadklasa2 { | '''class''' Nadklasa2 { | ||
'''int''' dajInt() { | '''int''' dajInt() { | ||
Linia 220: | Linia 232: | ||
konstruktor podklasy | konstruktor podklasy | ||
</div> | </div> | ||
</div> | </div> | ||
== Zadanie 6 == | == Zadanie 6 == | ||
Zmodyfikuj definicje wyjątków w przykładzie z ''PerpetuumMobile'' tak, aby metoda ''jedź()'' mogła zgłaszać wyjątek ''ŁamiePrawaFizyki'' | Zmodyfikuj definicje wyjątków w przykładzie z ''PerpetuumMobile'' tak, aby metoda ''jedź()'' mogła zgłaszać wyjątek ''ŁamiePrawaFizyki'' | ||
{{rozwiazanie|||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie||| | ||
'''class''' BłądContinuum '''extends''' | }} | ||
'''class''' ŁamiePrawaFizyki '''extends''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
'''class''' BłądContinuum '''extends''' Exception {} | |||
'''class''' ŁamiePrawaFizyki '''extends''' RuntimeException {} | |||
'''abstract''' '''class''' Samochód { | '''abstract''' '''class''' Samochód { | ||
Linia 243: | Linia 257: | ||
} | } | ||
</div> | </div> | ||
</div> | </div> |
Aktualna wersja na dzień 20:08, 27 wrz 2020
<<< Powrót do przedmiotu Programowanie obiektowe
<<< Powrót do wykładu Wyjątki c.d.
Zadanie 1
Zmodyfikuj klasę ZwalnianieZasobów2, aby zwalnianie odbywało się w bloku finally. Sprawdź, czy rzeczywiście zasób jest zwalniany nawet jak blok try jest opuszczany przy pomocy instrukcji return, break i continue.
Rozwiązanie
Zadanie 2
Podczas rezerwowania i zwalniania zasobów zazwyczaj też może wystąpić wyjątek. Użyj pokazanej poniżej klasy Zasób4 i zmodyfikuj swoje rozwiązanie poprzedniego zadania tak, aby zawsze oba zasoby były zwalniane. Zadbaj, żeby nie dochodziło do zaginięcia żadnych wyjątków. Możesz założyć, że wykonanie operacji zwolnij() na zamkniętym zasobie jest dozwolone.
class InnyMożliwyWyjątek extends Exception {} class JeszczeInnyMożliwyWyjątek extends Exception {} class Zasób4 { Zasób4(int i) { //... } void zarezerwuj() throws IOException {} void używaj() throws IOException {} void innaNiebezpiecznaOperacja() throws InnyMożliwyWyjątek, JeszczeInnyMożliwyWyjątek {} void zwolnij() throws IOException {} }
Rozwiązanie
Zadanie 3
Sprawdź, czy finally jest wykonywane pomimo wystąpienia wyjątku w bloku catch z tej samej instrukcji?
Rozwiązanie
Zadanie 4
Napisz klasę, której konstruktor zgłasza wyjątek. W metodzie main() utwórz egzemplarz tej klasy i obsłuż wyjątek.
Rozwiązanie
Zadanie 5
Sprawdź, czy konstruktor podklasy nie może obsłużyć wyjątków zgłaszanych przez konstruktor nadklasy. Napisz przykładowy kod pokazujący, że konstruktor nadklasy jest wykonywany wcześniej niż wskazuje na to umiejscowienie słowa super w konstruktorze podklasy.
Rozwiązanie (część 1)
Rozwiązanie (część 2)
Zadanie 6
Zmodyfikuj definicje wyjątków w przykładzie z PerpetuumMobile tak, aby metoda jedź() mogła zgłaszać wyjątek ŁamiePrawaFizyki
Rozwiązanie