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
import java.io.IOException;
class InnyMożliwyWyjątek extends Exception {}
class Zasób3 {
Zasób3(int i) {
//...
}
void zarezerwuj() {}
void używaj() throws IOException {}
void innaNiebezpiecznaOperacja() throws InnyMożliwyWyjątek {}
void zwolnij() {}
}
public class ZwalnianieZasobów3 {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
Zasób3 z = new Zasób3(i);
try {
z.zarezerwuj();
//tu jest niebezpieczny kod
z.używaj();
z.innaNiebezpiecznaOperacja();
if (i == 3) continue;
if (i == 8) return;
//...
//zwalnianie zasobów
z.zwolnij();
} catch (IOException e) {
//obsługa wyjątku IOException
} catch (InnyMożliwyWyjątek w) {
//obsługa wyjątku InnyMożliwyWyjątek
} finally {
//zwalnianie zasobów
z.zwolnij();
}
}
}
}