Como funciona a captura múltipla - 1

"Mais algumas lições interessantes. Oh, como eu amo ensinar!"

"Gostaria de falar sobre como vários blocos catch funcionam. É muito simples: quando ocorrem exceções em um bloco try , a execução se move para o primeiro bloco catch ."

"Se um tipo indicado entre parênteses do bloco catch corresponde ao tipo da exceção lançada, a execução começa dentro desse bloco. Caso contrário, passamos para o próximo bloco catch , onde a mesma verificação é realizada."

"Se ficarmos sem blocos catch e a exceção não for capturada, ela será relançada e o método atual será encerrado de forma anormal."

"Entendo. O bloco catch que coincidir com o tipo de exceção será executado."

"Sim, certo. No entanto, na realidade é um pouco mais complicado. As classes podem herdar outras classes. Se uma classe Cow herda uma classe Animal, o objeto Cow pode ser referenciado não apenas por uma variável Cow, mas também por uma variável Animal. "

"E?"

"Como todas as exceções herdam Exception ou RuntimeException (que também herda Exception ), elas ainda podem ser capturadas usando 'catch ( Exception e)' ou ' catch (RuntimeException e) '."

"E?"

"Podemos tirar duas conclusões. Primeiro, você pode usar 'catch (Exception e)' para capturar qualquer exceção. Segundo, a ordem dos blocos catch é importante. "

"Aqui estão alguns exemplos:"

"O ArithmeticExceptionque ocorre depois de dividirmos por 0 será capturado no segundo bloco catch."

Código
try
{
    System.out.println("Before calling method1.");
    int a = 1 / 0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}

"No exemplo abaixo, o ArithmeticExceptionserá capturado no primeiro bloco catch, pois todas as exceções herdam Exception, ou seja, Exceptionabrange todas as exceções. "

Código
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Divided by zero. Exception has been caught.");
}

"No exemplo abaixo, ArithmeticExceptionnão será capturado. Ele será relançado para o método de chamada."

Código
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}

"Isso esclareceu um pouco as coisas. Essas exceções não são o assunto mais fácil."

"Parece que sim. Na verdade, eles são uma das coisas mais simples em Java."

"Não sei se fico feliz ou triste com isso..."