Junior
Je blok finally vždy prováděn v konstrukci try-catch?
sobes.tech AI
Odpověď od AI
Ne, ne vždy. finally se může v následujících případech neprovést:
- Ukončení JVM během provádění bloku
trynebocatch. Například při voláníSystem.exit(). - Chyba JVM (například chyba nedostatku paměti nebo přetečení zásobníku).
- Nekonečný cyklus v bloku
trynebocatch. - Ukončení vlákna, které provádí blok
try-catch-finally.
V jiných případech, i když je vyvolána unchecked výjimka nebo je vráceno z bloku try nebo catch, bude blok finally proveden.
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("V bloku try");
// Ukončení JVM před provedením finally
// System.exit(0);
throw new RuntimeException("Vynucená výjimka");
} catch (RuntimeException e) {
System.out.println("V bloku catch: " + e.getMessage());
// Návrat z catch, finally se stejně provede
// return;
} finally {
System.out.println("V bloku finally"); // Tento kód se provede
}
System.out.println("Po try-catch-finally"); // Tento kód může být nedosažitelný
}
}