logo

Java Catch múltiples excepcions

Bloc Java Multi-catch

Un bloc try pot anar seguit d'un o més blocs catch. Cada bloc catch ha de contenir un controlador d'excepcions diferent. Per tant, si heu de realitzar tasques diferents quan es produeixen diferents excepcions, utilitzeu el bloc multi-catch java.

Punts a recordar

  • A la vegada només es produeix una excepció i alhora només s'executa un bloc catch.
  • Tots els blocs catch s'han d'ordenar del més específic al més general, és a dir, catch per a ArithmeticException ha d'anar abans de catch per a Exception.

Diagrama de flux del bloc multi-catch

Java Catch múltiples excepcions

Exemple 1

Vegem un exemple senzill de bloc multi-catch java.

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'); } } 
Prova-ho ara

Sortida:

fent que l'script de shell sigui executable
 Arithmetic Exception occurs rest of the code 

Exemple 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'); } } 
Prova-ho ara

Sortida:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

En aquest exemple, el bloc try conté dues excepcions. Però a la vegada només es produeix una excepció i s'executa el seu bloc catch corresponent.

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'); } } 
Prova-ho ara

Sortida:

 Arithmetic Exception occurs rest of the code 

Exemple 4

En aquest exemple, generem NullPointerException, però no hem proporcionat el tipus d'excepció corresponent. En aquest cas, el bloc catch que conté la classe d'excepció pare Excepció voluntat invocada.

MultipleCatchBlock4.java

10 de 50.00
 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'); } } 
Prova-ho ara

Sortida:

 Parent Exception occurs rest of the code 

Exemple 5

Vegem-ne un exemple, per gestionar l'excepció sense mantenir l'ordre d'excepcions (és a dir, del més específic al més 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...'); } } 
Prova-ho ara

Sortida:

 Compile-time error