logo

Java Catch Multiple Exceptions

Java Multi-catch blok

Po bloku try může následovat jeden nebo více bloků catch. Každý blok catch musí obsahovat jinou obslužnou rutinu výjimky. Pokud tedy musíte provádět různé úkoly při výskytu různých výjimek, použijte blok Java multi-catch.

Body k zapamatování

  • V jednom okamžiku dojde pouze k jedné výjimce a v daném okamžiku je proveden pouze jeden blok catch.
  • Všechny bloky catch musí být seřazeny od nejkonkrétnějšího po nejobecnější, tj. catch pro AritmeticException musí předcházet catch pro Exception.

Vývojový diagram bloku Multi-catch

Java Catch Multiple Exceptions

Příklad 1

Podívejme se na jednoduchý příklad java multi-catch bloku.

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'); } } 
Otestujte to hned

Výstup:

iskcon plná forma
 Arithmetic Exception occurs rest of the code 

Příklad 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'); } } 
Otestujte to hned

Výstup:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

V tomto příkladu obsahuje blok try dvě výjimky. Ale v jednom okamžiku dojde pouze k jedné výjimce a je proveden odpovídající blok catch.

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'); } } 
Otestujte to hned

Výstup:

 Arithmetic Exception occurs rest of the code 

Příklad 4

V tomto příkladu vygenerujeme NullPointerException, ale neposkytneme odpovídající typ výjimky. V takovém případě blok catch obsahující nadřazenou třídu výjimky Výjimka bude vyvolána.

MultipleCatchBlock4.java

semena vs spory
 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'); } } 
Otestujte to hned

Výstup:

 Parent Exception occurs rest of the code 

Příklad 5

Podívejme se na příklad, jak zpracovat výjimku bez zachování pořadí výjimek (tj. od nejkonkrétnější po nejobecnější).

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...'); } } 
Otestujte to hned

Výstup:

 Compile-time error