Junior
Je blok finally vždy vykonaný v konštrukcii try-catch?
sobes.tech AI
Odpoveď od AI
Nie, nie vždy. finally sa môže v nasledujúcich prípadoch nespustiť:
- Ukončenie JVM počas vykonávania bloku
tryalebocatch. Napríklad pri volaníSystem.exit(). - Chyba JVM (napríklad, chyba nedostatku pamäte alebo pretečenie zásobníka).
- Nekonečný cyklus v bloku
tryalebocatch. - Ukončenie vlákna, ktoré vykonáva blok
try-catch-finally.
V iných prípadoch, aj keď je vyvolaná unchecked výnimka alebo sa vráti z bloku try alebo catch, sa blok finally vykoná.
public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("V bloku try");
// Ukončenie JVM pred vykonaním finally
// System.exit(0);
throw new RuntimeException("Vynútená výnimka");
} catch (RuntimeException e) {
System.out.println("V bloku catch: " + e.getMessage());
// Návrat z catch, finally sa aj tak vykoná
// return;
} finally {
System.out.println("V bloku finally"); // Tento kód sa vykoná
}
System.out.println("Po try-catch-finally"); // Tento kód môže byť nedosiahnuteľný
}
}