"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 ArithmeticException
que ocorre depois de dividirmos por 0 será capturado no segundo bloco catch."
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 ArithmeticException
será capturado no primeiro bloco catch, pois todas as exceções herdam Exception, ou seja, Exception
abrange todas as exceções. "
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, ArithmeticException
não será capturado. Ele será relançado para o método de chamada."
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..."
GO TO FULL VERSION