Junior
Kas finally plokk alati täidetakse try-catch konstruktsioonis?
sobes.tech AI
Vastus AI-lt
Ei, mitte alati. finally võib jääda täitmata järgmistes olukordades:
- JVM lõpetamine
tryvõicatchploki ajal. Näiteks, kui kutsutakseSystem.exit(). - JVM viga (näiteks mälu puudus või virna üleküllus).
- Lõpmatu tsükkel
tryvõicatchplokis. - Töötlusploki
try-catch-finallylõpetamine.
Teistes olukordades, isegi kui visatakse välja unchecked erind või tagastatakse try või catch plokist, täidetakse finally plokk.
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Try plokis");
// JVM väljumine enne `finally` täitmist
// System.exit(0);
throw new RuntimeException("Võimustatud erind");
} catch (RuntimeException e) {
System.out.println("Catch plokis: " + e.getMessage());
// Tagastamine catch-st, `finally` täidetakse ikkagi
// return;
} finally {
System.out.println("`Finally` plokis"); // See kood täidetakse
}
System.out.println("Pärast try-catch-finally"); // See kood võib jääda täitmata
}
}