Sobes.tech
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 try alebo catch. 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 try alebo catch.
  • 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ý
    }
}