Java try ... catch (Példákkal)

Ebben az oktatóanyagban példák segítségével megismerkedhetünk a try catch utasítással Java-ban.

A try… catchJava blokkja a kivételek kezelésére szolgál, és megakadályozza a program rendellenes leállítását.

Itt található a try… catchJava blokkjának szintaxisa .

 try( // code ) catch(exception) ( // code )

A tryblokk tartalmazza azt a kódot, amely kivételt generálhat.

A catchblokk tartalmazza azt a kódot, amelyet akkor hajtanak végre, amikor a tryblokkon belül kivétel lép fel .

Példa: Java try… catch block

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )

Kimenet

 ArithmeticException => / nullával

A fenti példában vegye észre a sort,

 int divideByZero = 5 / 0;

Itt megpróbálunk egy számot nullával osztani . Ebben az esetben kivétel lép fel. Ezért ezt a kódot bezártuk a tryblokkba.

Amikor a program találkozik ezzel a kóddal, ArithmeticExceptionmegtörténik. És a kivételt elkapja a catchblokk, és végrehajtja a kódot a catchblokkon belül .

A catchblokk csak akkor kerül végrehajtásra, ha a tryblokkon belül van kivétel .

Megjegyzés : A Java-ban tryblokkot használhatunk blokk nélkül catch. Nem használhatunk azonban catchblokkot blokk nélkül try.

Java próbáld ki … végül blokkold

Használhatjuk a tryblokkot egy utolsó blokkkal együtt.

Ebben az esetben az utolsó blokkot mindig végrehajtják, függetlenül attól, hogy van-e kivétel a try blokkon belül, vagy sem.

Példa: Java try… végül blokkolja

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )

Kimenet

 Végül a blokk mindig végrehajtásra kerül. Kivétel a "main" szálban java.lang.ArithmeticException: / nullával a Main.mainnál (Main.java:4)

A fenti példában a tryblokkot a blokkkal együtt használtuk finally. Láthatjuk, hogy a tryblokk belsejében lévő kód kivételt okoz.

A finallyblokkon belüli kód azonban a kivételtől függetlenül végrehajtásra kerül.

A Java megpróbálja … elkapja … végül blokkolja

A Java-ban a blokk utáni utolsó blokkot is használhatjuk try… catch. Például,

 import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )

Kimenet

 Kivételi => Index 5 bevitele a határon kívülre az 5 hosszúságig. A PrintWriter bezárása

A fenti példában létrehoztunk egy tömb nevű listát és egy output.txt nevű fájlt. Itt próbálunk adatokat olvasni a tömbből és tárolni a fájlba.

Figyelje meg a kódot,

 for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )

Itt a tömb mérete és a tömb 5utolsó eleme a list(4). Azonban megpróbálunk elemekhez hozzáférni a a(5) és címen a(6).

Ezért a kód kivételt generál, amelyet a fogási blokk elkap.

Mivel a finallyblokkot mindig végrehajtják, kódot is mellékeltünk PrintWritera blokk belsejének bezárásához .

Jó gyakorlat az utolsó blokk használata fontos tisztító kódok, például fájlok vagy kapcsolatok bezárása.

Megjegyzés : Vannak olyan esetek, amikor egy finallyblokk nem hajt végre:

  • A System.exit()módszer használata
  • Kivétel történik a finallyblokkban
  • Egy szál halála

Több Catch blokk

Minden tryblokkhoz lehet nulla vagy több catchblokk. Több catchblokk lehetővé teszi számunkra, hogy az egyes kivételeket különböző módon kezeljük.

Az egyes catchblokkok argumentumának típusa jelzi az általa kezelhető kivétel típusát. Például,

 class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )

Kimenet

 IndexOutOfBoundsException => Az index 10 a hosszon kívül a határoktól

Ebben a példában létrehoztunk egy 10-esarr méretű egész tömböt .

Mivel a tömbindex 0- tól indul , a tömb utolsó eleme a arr(9). Figyelje meg az állítást,

 arr(10) = 11;

Itt megpróbálunk értéket rendelni a 10 indexhez . Ezért IndexOutOfBoundExceptionelőfordul.

Amikor kivétel lép fel a tryblokkban,

  • A kivétel az első catchblokkra kerül. Az első catchblokk nem kezeli az an-t IndexOutOfBoundsException, ezért átkerül a következő catchblokkba.
  • A catchfenti példa második blokkja a megfelelő kivételkezelő, mert egy IndexOutOfBoundsException. Ezért végrehajtják.

Több kivétel elkapása

A Java SE 7 és újabb verziókból mostantól egynél több kivételt is elkaphatunk egy catchblokkkal.

Ez csökkenti a kódduplikációt, növeli a kód egyszerűségét és hatékonyságát.

Minden, a catchblokk által kezelhető kivételtípust egy függőleges sáv választ el |.

Szintaxisa:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )

További információkért látogasson el a Java oldalra, ahol több kivételt talál.

Java try-with-resources utasítás

A try-with-resources utasítás egy try utasítás, amely egy vagy több erőforrás-deklarációval rendelkezik.

Szintaxisa:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )

Az erőforrás a program végén bezárandó objektum. A try utasításban deklarálni és inicializálni kell.

Vegyünk egy példát.

 try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )

A try-with-resources utasítást automatikus erőforrás-kezelésnek is nevezik . Ez az utasítás automatikusan bezárja az összes erőforrást a utasítás végén.

További információért keresse fel a java try-with-resources nyilatkozatot.

érdekes cikkek...