logo

Java ujame več izjem

Java Multi-catch blok

Bloku poskusa lahko sledi en ali več blokov ulova. Vsak blok catch mora vsebovati drugačno obravnavo izjem. Torej, če morate izvajati različne naloge ob pojavu različnih izjem, uporabite java multi-catch block.

Točke, ki si jih je treba zapomniti

  • Naenkrat se pojavi samo ena izjema in naenkrat se izvede samo en blok catch.
  • Vsi bloki catch morajo biti razvrščeni od najbolj specifičnega do najbolj splošnega, tj. catch for ArithmeticException mora biti pred catch for Exception.

Diagram poteka bloka Multi-catch

Java ujame več izjem

Primer 1

Oglejmo si preprost primer java multi-catch bloka.

MultipleCatchBlock1.java

 public class MultipleCatchBlock1 { public static void main(String[] args) { try{ int a[]=new int[5]; a[5]=30/0; } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Preizkusite zdaj

Izhod:

celoštevilska dvojna java
 Arithmetic Exception occurs rest of the code 

Primer 2

MultipleCatchBlock2.java

 public class MultipleCatchBlock2 { public static void main(String[] args) { try{ int a[]=new int[5]; System.out.println(a[10]); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Preizkusite zdaj

Izhod:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

V tem primeru poskusni blok vsebuje dve izjemi. Toda naenkrat se pojavi samo ena izjema in njen ustrezen blok catch se izvede.

MultipleCatchBlock3.java

 public class MultipleCatchBlock3 { public static void main(String[] args) { try{ int a[]=new int[5]; a[5]=30/0; System.out.println(a[10]); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Preizkusite zdaj

Izhod:

 Arithmetic Exception occurs rest of the code 

Primer 4

V tem primeru ustvarimo NullPointerException, vendar nismo zagotovili ustrezne vrste izjeme. V takem primeru blok catch, ki vsebuje nadrejeni razred izjeme Izjema bo priklican.

MultipleCatchBlock4.java

datotečni sistem v linuxu
 public class MultipleCatchBlock4 { public static void main(String[] args) { try{ String s=null; System.out.println(s.length()); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Preizkusite zdaj

Izhod:

 Parent Exception occurs rest of the code 

Primer 5

Oglejmo si primer obravnave izjeme brez vzdrževanja vrstnega reda izjem (tj. od najbolj specifičnega do najbolj splošnega).

MultipleCatchBlock5.java

 class MultipleCatchBlock5{ public static void main(String args[]){ try{ int a[]=new int[5]; a[5]=30/0; } catch(Exception e){System.out.println('common task completed');} catch(ArithmeticException e){System.out.println('task1 is completed');} catch(ArrayIndexOutOfBoundsException e){System.out.println('task 2 completed');} System.out.println('rest of the code...'); } } 
Preizkusite zdaj

Izhod:

 Compile-time error