Java rileva più eccezioni
Blocco multi-cattura Java
Un blocco try può essere seguito da uno o più blocchi catch. Ogni blocco catch deve contenere un gestore di eccezioni diverso. Pertanto, se è necessario eseguire attività diverse al verificarsi di eccezioni diverse, utilizzare il blocco multi-catch Java.
Punti da ricordare
- Alla volta si verifica solo un'eccezione e alla volta viene eseguito solo un blocco catch.
- Tutti i blocchi catch devono essere ordinati dal più specifico al più generale, ovvero catch per ArithmeticException deve precedere catch per Exception.
Diagramma di flusso del blocco multicattura
Esempio 1
Vediamo un semplice esempio di blocco 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'); } } Provalo adesso Produzione:
Arithmetic Exception occurs rest of the code
Esempio 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'); } } Provalo adesso Produzione:
ArrayIndexOutOfBounds Exception occurs rest of the code
In questo esempio, try block contiene due eccezioni. Ma alla volta si verifica solo un'eccezione e viene eseguito il blocco catch corrispondente.
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'); } } Provalo adesso Produzione:
Arithmetic Exception occurs rest of the code
Esempio 4
In questo esempio, generiamo NullPointerException, ma non forniamo il tipo di eccezione corrispondente. In tal caso, il blocco catch contenente la classe di eccezione genitore Eccezione verrà invocato.
MultipleCatchBlock4.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'); } } Provalo adesso Produzione:
Parent Exception occurs rest of the code
Esempio 5
Vediamo un esempio, per gestire l'eccezione senza mantenere l'ordine delle eccezioni (ovvero dalla più specifica alla più generale).
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...'); } } Provalo adesso Produzione:
Compile-time error