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
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