Ebben az oktatóanyagban példák segítségével megismerkedhetünk a try catch utasítással Java-ban.
A try… catch
Java 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… catch
Java blokkjának szintaxisa .
try( // code ) catch(exception) ( // code )
A try
blokk tartalmazza azt a kódot, amely kivételt generálhat.
A catch
blokk tartalmazza azt a kódot, amelyet akkor hajtanak végre, amikor a try
blokkon 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 try
blokkba.
Amikor a program találkozik ezzel a kóddal, ArithmeticException
megtörténik. És a kivételt elkapja a catch
blokk, és végrehajtja a kódot a catch
blokkon belül .
A catch
blokk csak akkor kerül végrehajtásra, ha a try
blokkon belül van kivétel .
Megjegyzés : A Java-ban try
blokkot használhatunk blokk nélkül catch
. Nem használhatunk azonban catch
blokkot blokk nélkül try
.
Java próbáld ki … végül blokkold
Használhatjuk a try
blokkot 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 try
blokkot a blokkkal együtt használtuk finally
. Láthatjuk, hogy a try
blokk belsejében lévő kód kivételt okoz.
A finally
blokkon 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 5
utolsó 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 finally
blokkot mindig végrehajtják, kódot is mellékeltünk PrintWriter
a 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 finally
blokk nem hajt végre:
- A
System.exit()
módszer használata - Kivétel történik a
finally
blokkban - Egy szál halála
Több Catch blokk
Minden try
blokkhoz lehet nulla vagy több catch
blokk. Több catch
blokk lehetővé teszi számunkra, hogy az egyes kivételeket különböző módon kezeljük.
Az egyes catch
blokkok 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 IndexOutOfBoundException
előfordul.
Amikor kivétel lép fel a try
blokkban,
- A kivétel az első
catch
blokkra kerül. Az elsőcatch
blokk nem kezeli az an-tIndexOutOfBoundsException
, ezért átkerül a következőcatch
blokkba. - A
catch
fenti példa második blokkja a megfelelő kivételkezelő, mert egyIndexOutOfBoundsException
. 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 catch
blokkkal.
Ez csökkenti a kódduplikációt, növeli a kód egyszerűségét és hatékonyságát.
Minden, a catch
blokk á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.