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