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