logo

Java captura múltiplas exceções

Bloco Java Multi-catch

Um bloco try pode ser seguido por um ou mais blocos catch. Cada bloco catch deve conter um manipulador de exceções diferente. Portanto, se você tiver que executar tarefas diferentes na ocorrência de exceções diferentes, use o bloco java multi-catch.

Pontos para lembrar

  • Por vez, apenas uma exceção ocorre e por vez, apenas um bloco catch é executado.
  • Todos os blocos catch devem ser ordenados do mais específico para o mais geral, ou seja, o catch para ArithmeticException deve vir antes do catch para Exception.

Fluxograma do Bloco Multi-catch

Java captura múltiplas exceções

Exemplo 1

Vamos ver um exemplo simples de bloco 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'); } } 
Teste agora

Saída:

tipos de árvore binária
 Arithmetic Exception occurs rest of the code 

Exemplo 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'); } } 
Teste agora

Saída:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

Neste exemplo, o bloco try contém duas exceções. Mas por vez ocorre apenas uma exceção e seu bloco catch correspondente é executado.

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'); } } 
Teste agora

Saída:

 Arithmetic Exception occurs rest of the code 

Exemplo 4

Neste exemplo, geramos NullPointerException, mas não fornecemos o tipo de exceção correspondente. Nesse caso, o bloco catch contendo a classe de exceção pai Exceção será invocado.

MultipleCatchBlock4.java

cpld versus fpga
 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'); } } 
Teste agora

Saída:

 Parent Exception occurs rest of the code 

Exemplo 5

Vejamos um exemplo para tratar a exceção sem manter a ordem das exceções (ou seja, da mais específica para a mais geral).

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...'); } } 
Teste agora

Saída:

 Compile-time error