Java poskusni blok
Java poskusi blok se uporablja za pritrditev kode, ki lahko povzroči izjemo. Uporabiti ga je treba znotraj metode.
Če pride do izjeme pri določenem stavku v bloku poskusa, se preostali del kode bloka ne bo izvedel. Zato je priporočljivo, da kode ne hranite v poskusnem bloku, ki ne bo sprožil izjeme.
Java poskusnemu bloku mora slediti blok catch ali finally.
Sintaksa Java try-catch
try{ //code that may throw an exception }catch(Exception_class_Name ref){}
Sintaksa bloka try-finally
try{ //code that may throw an exception }finally{}
Java catch block
Java catch block se uporablja za obravnavanje izjeme z deklaracijo vrste izjeme znotraj parametra. Navedena izjema mora biti izjema nadrejenega razreda (tj. Izjema) ali tip ustvarjene izjeme. Vendar pa je dober pristop razglasiti ustvarjeno vrsto izjeme.
niz v jsonobject
Blok catch je treba uporabiti samo po poskusnem bloku. Z enim poskusnim blokom lahko uporabite več blokov catch.
Notranje delovanje Java poskusnega bloka
JVM najprej preveri, ali je izjema obravnavana ali ne. Če izjema ni obravnavana, JVM zagotovi privzeti obravnavalec izjem, ki izvaja naslednje naloge:
- Natisne opis izjeme.
- Natisne sled sklada (hierarhija metod, kjer je prišlo do izjeme).
- Povzroči prekinitev programa.
Toda če aplikacijski programer obravnava izjemo, se normalni tok aplikacije ohrani, tj. izvede se preostala koda.
Težava brez obravnave izjem
Poskusimo razumeti težavo, če ne uporabimo bloka try-catch.
Primer 1
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'); } }Preizkusite zdaj
Izhod:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Kot je prikazano v zgornjem primeru, je preostali del kode se ne izvede (v tem primeru se preostali del kode izjava ni natisnjena).
Za izjemo je lahko 100 vrstic kode. Če izjema ni obravnavana, vsa koda pod izjemo ne bo izvedena.
Rešitev z obravnavanjem izjem
Oglejmo si rešitev zgornje težave z javanskim blokom try-catch.
Primer 2
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'); } }Preizkusite zdaj
Izhod:
java.lang.ArithmeticException: / by zero rest of the code
Kot je prikazano v zgornjem primeru, je preostali del kode se izvaja, tj preostali del kode izjava je natisnjena.
Primer 3
V tem primeru smo kodo ohranili tudi v poskusnem bloku, ki ne bo vrgel izjeme.
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); } } }Preizkusite zdaj
Izhod:
java.lang.ArithmeticException: / by zero
Tukaj lahko vidimo, da če pride do izjeme v poskusnem bloku, se preostali del blokovne kode ne bo izvedel.
Primer 4
Tukaj obravnavamo izjemo z izjemo nadrejenega razreda.
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'); } }Preizkusite zdaj
Izhod:
java.lang.ArithmeticException: / by zero rest of the code
Primer 5
Oglejmo si primer tiskanja sporočila po meri ob izjemi.
TryCatchExample5.java
pretvori niz v json 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'); } } }Preizkusite zdaj
Izhod:
Can't divided by zero
Primer 6
Oglejmo si primer za razrešitev izjeme v bloku catch.
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)); } } }Preizkusite zdaj
Izhod:
25
Primer 7
V tem primeru skupaj s poskusnim blokom v blok catch priložimo tudi kodo izjeme.
huffmanova koda za kodiranje
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'); } }Preizkusite zdaj
Izhod:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Tukaj lahko vidimo, da blok catch ni vseboval kode izjeme. Torej priložite kodo izjeme znotraj poskusnega bloka in uporabite blok catch samo za obravnavanje izjem.
Primer 8
V tem primeru obravnavamo ustvarjeno izjemo (Aritmetična izjema) z drugo vrsto razreda izjem (ArrayIndexOutOfBoundsException).
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'); } }Preizkusite zdaj
Izhod:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Primer 9
Oglejmo si primer obravnave druge nepreverjene izjeme.
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'); } }Preizkusite zdaj
Izhod:
java.lang.ArrayIndexOutOfBoundsException: 10 rest of the code
Primer 10
Oglejmo si primer obravnave preverjene izjeme.
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'); } }Preizkusite zdaj
Izhod:
File saved successfully