Sobes.tech
Junior

Ar visada vykdomas finally blokas try-catch konstrukcijoje?

sobes.tech AI

Atsakymas iš AI

Ne, ne visada. finally gali nebūti vykdytas šiais atvejais:

  • JVM užbaigimas vykdant try arba catch bloką. Pavyzdžiui, iškvietus System.exit().
  • JVM klaida (pvz., atminties trūkumas arba steko perpildymas).
  • Begalinis ciklas try arba catch bloke.
  • Gijos, vykdančios try-catch-finally bloką, užbaigimas.

Kitais atvejais, net jei išmetama unchecked išimtis arba grįžtama iš try arba catch bloko, finally blokas bus vykdytas.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("Try bloke");
            // Išeiti iš JVM prieš vykdant `finally`
            // System.exit(0);
            throw new RuntimeException("Priverstinė išimtis");
        } catch (RuntimeException e) {
            System.out.println("Catch bloke: " + e.getMessage());
            // Grįžimas iš catch, `finally` vis tiek bus vykdytas
            // return;
        } finally {
            System.out.println("`Finally` bloke"); // Šis kodas bus vykdytas
        }
        System.out.println("Po try-catch-finally"); // Šis kodas gali būti neprieinamas
    }
}