PO Wyjątki c.d. - ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Aneczka (dyskusja | edycje)
Aneczka (dyskusja | edycje)
Linia 152: Linia 152:
== Zadanie 5 ==
== Zadanie 5 ==
Sprawdź, że 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ź, że 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.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie (część 1)''' 
{{rozwiazanie|(część 1)||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''class''' Nadklasa1 {
  '''class''' Nadklasa1 {
   Nadklasa1() '''throws''' Exception {}
   Nadklasa1() '''throws''' Exception {}
Linia 178: Linia 177:
  }
  }
</div>
</div>
</div>
</div>}}
 
1
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{rozwiazanie|(część 2)||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
'''Rozwiązanie (część 2)''' 
<div class="mw-collapsible-content" style="display:none">
  '''class''' Nadklasa2 {
  '''class''' Nadklasa2 {
   int dajInt() {
   int dajInt() {
Linia 228: Linia 225:
  konstruktor podklasy
  konstruktor podklasy
</div>
</div>
</div>
</div>}}


== Zadanie 6 ==
== Zadanie 6 ==

Wersja z 13:27, 1 sie 2006

<<< Powrót

<<< Powrót do modułu 8

Zadanie 1

Zmodyfikuj klasę ZwalnianieZasobów2, aby zwalnianie odbywało się w klauzuli finally. Sprawdź, czy rzeczywiście zasób jest zwalniany nawet jak blok try jest opuszczany przy pomocy instrukcji return, break i continue.

Rozwiązanie

{{{3}}}

Zadanie 2

Podczas rezerwowania i zwalniania zasobów zazwyczaj też może wystąpić wyjątek. Użyj pokazanej poniższej klasy Zasób3 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ób3(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

{{{3}}}

Zadanie 3

Sprawdź, czy finally jest wykonywane pomimo wystąpienia wyjątku w bloku catch z tej samej instrukcji.

Rozwiązanie

{{{3}}}

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

{{{3}}}

Zadanie 5

Sprawdź, że 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)

{{{3}}}

1 Rozwiązanie (część 2)

{{{3}}}

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