logo

Java try-catch blokk

Java try blokk

Jáva próbáld ki blokkot arra használják, hogy bezárják azt a kódot, amely kivételt okozhat. A módszeren belül kell használni.

Ha kivétel történik az adott utasításnál a try blokkban, a blokkkód többi része nem hajtódik végre. Ezért nem ajánlott a kódot a try blokkban tartani, amely nem okoz kivételt.

A Java try blokkot vagy a catch-nek vagy a végül blokknak kell követnie.

A Java try-catch szintaxisa

 try{ //code that may throw an exception }catch(Exception_class_Name ref){} 

A try-finally blokk szintaxisa

 try{ //code that may throw an exception }finally{} 

Java catch blokk

A Java catch blokk a kivétel kezelésére szolgál a kivétel típusának a paraméteren belüli deklarálásával. A deklarált kivételnek a szülő osztály kivételének (azaz kivételnek) vagy a generált kivételtípusnak kell lennie. A jó megközelítés azonban a generált kivételtípus deklarálása.

gimp mentés jpeg formátumban

A catch blokkot csak a try blokk után szabad használni. Több fogási blokkot is használhat egyetlen próbálkozási blokkal.

Java try-catch blokk belső működése

Java try-catch blokk

A JVM először ellenőrzi, hogy a kivételt kezelték-e vagy sem. Ha a kivétel nincs kezelve, a JVM alapértelmezett kivételkezelőt biztosít, amely a következő feladatokat hajtja végre:

  • Kinyomtatja a kivétel leírását.
  • Kinyomtatja a verem nyomkövetését (a kivétel előfordulásának módszereinek hierarchiája).
  • A program leállását okozza.

De ha az alkalmazásprogramozó kezeli a kivételt, akkor az alkalmazás normál áramlása megmarad, azaz a kód többi része végrehajtódik.

Kivétel nélküli kezelési probléma

Próbáljuk megérteni a problémát, ha nem használunk try-catch blokkot.

1. példa

TryCatchExample1.java

 public class TryCatchExample1 { public static void main(String[] args) { int data=50/0; //may throw exception System.out.println('rest of the code'); } } 
Tesztelje most

Kimenet:

 Exception in thread 'main' java.lang.ArithmeticException: / by zero 

Ahogy a fenti példában is látható, a a kód többi része nem hajtják végre (ilyen esetben a a kód többi része nyilatkozat nincs nyomtatva).

A kivétel után 100 sornyi kód lehet. Ha a kivételt nem kezelik, a kivétel alatti összes kód nem kerül végrehajtásra.

Megoldás kivételkezeléssel

Nézzük meg a fenti probléma megoldását egy java try-catch blokk segítségével.

2. példa

TryCatchExample2.java

 public class TryCatchExample2 { public static void main(String[] args) { try { int data=50/0; //may throw exception } //handling the exception catch(ArithmeticException e) { System.out.println(e); } System.out.println('rest of the code'); } } 
Tesztelje most

Kimenet:

 java.lang.ArithmeticException: / by zero rest of the code 

Ahogy a fenti példában is látható, a a kód többi része végrehajtják, azaz a a kód többi része nyilatkozatot nyomtatnak.

3. példa

Ebben a példában a kódot egy try blokkban is megtartottuk, amely nem dob kivételt.

TryCatchExample3.java

 public class TryCatchExample3 { public static void main(String[] args) { try { int data=50/0; //may throw exception // if exception occurs, the remaining statement will not exceute System.out.println('rest of the code'); } // handling the exception catch(ArithmeticException e) { System.out.println(e); } } } 
Tesztelje most

Kimenet:

javatható
 java.lang.ArithmeticException: / by zero 

Itt láthatjuk, hogy ha kivétel történik a try blokkban, a blokkkód többi része nem hajtódik végre.

4. példa

Itt a kivételt a szülő osztály kivételével kezeljük.

TryCatchExample4.java

 public class TryCatchExample4 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception by using Exception class catch(Exception e) { System.out.println(e); } System.out.println('rest of the code'); } } 
Tesztelje most

Kimenet:

 java.lang.ArithmeticException: / by zero rest of the code 

5. példa

Lássunk egy példát egyéni üzenet nyomtatására kivétel esetén.

TryCatchExample5.java

 public class TryCatchExample5 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception catch(Exception e) { // displaying the custom message System.out.println('Can't divided by zero'); } } } 
Tesztelje most

Kimenet:

 Can't divided by zero 

6. példa

Nézzünk egy példát a kivétel feloldására egy catch blokkban.

TryCatchExample6.java

 public class TryCatchExample6 { public static void main(String[] args) { int i=50; int j=0; int data; try { data=i/j; //may throw exception } // handling the exception catch(Exception e) { // resolving the exception in catch block System.out.println(i/(j+2)); } } } 
Tesztelje most

Kimenet:

 25 

7. példa

Ebben a példában a try blokk mellett kivételkódot is befoglalunk egy catch blokkba.

TryCatchExample7.java

 public class TryCatchExample7 { public static void main(String[] args) { try { int data1=50/0; //may throw exception } // handling the exception catch(Exception e) { // generating the exception in catch block int data2=50/0; //may throw exception } System.out.println('rest of the code'); } } 
Tesztelje most

Kimenet:

 Exception in thread 'main' java.lang.ArithmeticException: / by zero 

Itt láthatjuk, hogy a catch blokk nem tartalmazta a kivételkódot. Tehát zárja be a kivételkódot egy try blokkba, és csak a catch blokkot használja a kivételek kezelésére.

8. példa

Ebben a példában a generált kivételt (Arithmetic Exception) egy másik típusú kivételosztállyal kezeljük (ArrayIndexOutOfBoundsException).

c++ hasító karakterlánc

TryCatchExample8.java

 public class TryCatchExample8 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // try to handle the ArithmeticException using ArrayIndexOutOfBoundsException catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } } 
Tesztelje most

Kimenet:

 Exception in thread 'main' java.lang.ArithmeticException: / by zero 

9. példa

Lássunk egy példát egy másik ellenőrizetlen kivétel kezelésére.

TryCatchExample9.java

 public class TryCatchExample9 { public static void main(String[] args) { try { int arr[]= {1,3,5,7}; System.out.println(arr[10]); //may throw exception } // handling the array exception catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } } 
Tesztelje most

Kimenet:

 java.lang.ArrayIndexOutOfBoundsException: 10 rest of the code 

10. példa

Nézzünk egy példát az ellenőrzött kivételek kezelésére.

TryCatchExample10.java

 import java.io.FileNotFoundException; import java.io.PrintWriter; public class TryCatchExample10 { public static void main(String[] args) { PrintWriter pw; try { pw = new PrintWriter('jtp.txt'); //may throw exception pw.println('saved'); } // providing the checked exception handler catch (FileNotFoundException e) { System.out.println(e); } System.out.println('File saved successfully'); } } 
Tesztelje most

Kimenet:

 File saved successfully