Kezdő Olvasási idő: ~4 perc

Használat

Try-catch-finally, try-with-resources és multi-catch

Használat

A try-catch-finally és a try-with-resources a kivételek kezelése mellett erőforrás-felszabadítást is szabályoz.

1. Definíció

Az exception kezelés használati oldala azt mutatja meg, hogyan fogsz el hibát, hogyan reagálsz rá, és mikor szabadítasz fel erőforrást. Interjún itt nemcsak a szintaxis számít, hanem a vezérlési folyamat pontos megértése is. A téma erősen kapcsolódik I/O-hoz, adatbázis-műveletekhez és tranzakciókhoz. A finally és a try-with-resources körüli finomságok klasszikus interjúkérdések.

2. Alapfogalmak

Fogalom Jelentés Miért fontos
try A kivételt dobó kód blokkja Itt fut a védett logika.
catch Hibakezelő ág Specifikus kivételt célszerű fogni.
finally Mindig lefutó tisztítási blokk Erőforrás-felszabadításra régi megoldás.
try-with-resources Automatikus resource kezelés Az AutoCloseable objektumokat zárja.
suppressed exception Másodlagos, elnyomott kivétel Try-with-resources esetén fontos diagnosztikai részlet.
  • A catch blokkok sorrendje számít: a specifikusabb kivételnek kell előbb jönnie.
  • A finally normál és exceptionális úton is lefut, kivéve nagyon speciális eseteket, például JVM leállás.
  • A try-with-resources a legbiztonságosabb alapértelmezett forma fájlokhoz, streamekhez, JDBC erőforrásokhoz.
  • Suppressed exception esetén a zárás során keletkező kivétel nem veszik el teljesen, hanem a fő kivételhez kapcsolódik.

3. Gyakorlati használat

A(z) Használat témában a legfontosabb gyakorlati kérdés mindig az, hogy milyen use-case-re választasz eszközt. A jó interjúválasz itt nem csak azt mondja meg, mit lehet csinálni, hanem azt is, mikor érdemes és mikor nem.

  • Preferáld a try-with-resources megoldást minden AutoCloseable erőforrásnál.
  • A catch blokkban vagy kezeld érdemben a hibát, vagy fordítsd át értelmesebb kivétellé; az üres catch blokk anti-pattern.
  • A finally blokkba ne írj olyan logikát, ami felülírja vagy elrejti az eredeti exceptiont.
  • Interjún jó pont, ha megemlíted a multi-catch lehetőséget és a suppressed exception fogalmát.

4. Kód példák

Egyszerű példa

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TryWithResourcesExample {
    public String firstLine(String path) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            return reader.readLine();
        }
    }
}

Haladó példa

public class FinallyFlow {
    public static int demo() {
        try {
            return 1;
        } finally {
            System.out.println("cleanup still runs");
        }
    }

    public static void main(String[] args) {
        System.out.println(demo());
    }
}

A kódpéldák interjún azért hasznosak, mert megmutatják, hogy a fogalmi szintű tudást le tudod fordítani konkrét API-használatra. Ha röviden el tudod magyarázni, miért így írod a példát, az általában többet ér, mint egy túlbonyolított demo.

5. Trade-offok

Szempont Előny Hátrány
finally Egyszerű tisztítási hely Könnyű vele elrejteni eredeti hibát, ha rosszul használod
try-with-resources Automatikus és biztonságos zárás Csak AutoCloseable típusokra működik közvetlenül
Széles catch(Exception) Gyorsan összefog sok hibát Diagnosztikailag gyenge és túl általános

6. Gyakori hibák

  • Rossz: Üres catch blokkot hagysz. ✅ Helyes: Legalább logolj, fordítsd át, vagy kezeld érdemben a hibát.
  • Rossz: A finally blokkban return-t használsz. ✅ Helyes: Kerüld, mert elnyomhatja az eredeti vezérlési utat vagy exceptiont.
  • Rossz: Manuálisan zárod az erőforrást mindenhol try-with-resources helyett. ✅ Helyes: AutoCloseable esetén használd a nyelvi támogatást.

7. Senior szintű meglátások

Senior szemmel a hibakezelés olvashatósági kérdés is. A túl sok egymásba ágyazott try-catch rontja a karbantarthatóságot, ezért érdemes réteghatároknál kezelni a hibát.

Follow-up interjúkérdés: mi a különbség a fő exception és a suppressed exception között? Try-with-resources esetén a művelet közbeni hiba a fő kivétel, a close közbeni hiba suppressed lesz.

A jó exception usage nem csak technikai helyesség, hanem diagnosztikai minőség is: megőrzi az eredeti contextet, stack trace-t és domain jelentést.

Tipikus follow-up interjúkérdések:

  • Hogyan magyaráznád el röviden a(z) Használat témát egy junior fejlesztőnek?
  • Milyen trade-offot látsz a(z) Használat kapcsán valós projektben?
  • Milyen tipikus production hibát tudsz ehhez a témához kötni?

Senior gyakorlatban az exception kezelésnél különösen fontos, hogy a hibautak tesztelhetők és megfigyelhetők legyenek. Egy jól kialakított try-catch vagy try-with-resources blokk nem csak helyesen működik, hanem debug közben is egyértelművé teszi, hol keletkezett az eredeti hiba, és hol történt a cleanup vagy az exception translation.

8. Szószedet

Kifejezés Jelentés
try-with-resources Nyelvi szerkezet automatikus erőforrás-záráshoz.
AutoCloseable Olyan típus, amit a try-with-resources automatikusan lezár.
suppressed exception A záráskor keletkezett, a fő kivételhez csatolt kivétel.
multi-catch Több kivételtípus fogása egy catch ágban.
cleanup Erőforrások felszabadítása, lezárása.

9. Gyorsreferencia

  • catch sorrend: specifikustól az általános felé.
  • finally általában lefut.
  • Erőforráshoz default: try-with-resources.
  • Ne hagyj üres catch blokkot.
  • Suppressed exception-t is vizsgálhatsz diagnosztikánál.

Ha interjún elakadsz, a(z) Használat témánál mindig térj vissza a három alapelvhez: pontos definíció, tipikus use-case, és a legfontosabb trade-off vagy hiba.

🎮 Játékok

8 kérdés