Bloc Java Multi-catch
Un bloc try poate fi urmat de unul sau mai multe blocuri catch. Fiecare bloc catch trebuie să conțină un handler de excepții diferit. Deci, dacă trebuie să efectuați diferite sarcini la apariția diferitelor excepții, utilizați blocul multi-catch java.
Puncte de reținut
- La un moment dat apare o singură excepție și la un moment dat este executat un singur bloc catch.
- Toate blocurile de captură trebuie să fie ordonate de la cel mai specific la cel mai general, adică catch pentru ArithmeticException trebuie să vină înainte de catch pentru Exception.
Organigrama blocului multi-captură
Exemplul 1
Să vedem un exemplu simplu de bloc java multi-catch.
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'); } }Testează-l acum
Ieșire:
format șir java
Arithmetic Exception occurs rest of the code
Exemplul 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'); } }Testează-l acum
Ieșire:
ArrayIndexOutOfBounds Exception occurs rest of the code
În acest exemplu, blocul try conține două excepții. Dar la un moment dat apare o singură excepție și este executat blocul său catch corespunzător.
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'); } }Testează-l acum
Ieșire:
Arithmetic Exception occurs rest of the code
Exemplul 4
În acest exemplu, generăm NullPointerException, dar nu am furnizat tipul de excepție corespunzător. În acest caz, blocul catch care conține clasa de excepție părinte Excepție va invocat.
MultipleCatchBlock4.java
mașină virtuală java
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'); } }Testează-l acum
Ieșire:
Parent Exception occurs rest of the code
Exemplul 5
Să vedem un exemplu, pentru a gestiona excepția fără a menține ordinea excepțiilor (adică de la cel mai specific la cel mai general).
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...'); } }Testează-l acum
Ieșire:
Compile-time error