"Ah. Aí está você. Eu estive procurando por você."
"Aconteceu alguma coisa?"
"Não, mas ainda estamos estudando."
"OK. Estou ouvindo."
"Quero contar mais algumas coisas sobre exceções:"
"No Java 7, a construção try-catch foi ligeiramente estendida por meio da adição de vários blocos catch. Veja este exemplo:"
try
{
…
}
catch (IOException ex)
{
logger.log(ex);
throw ex;
}
catch (SQLException ex)
{
logger.log(ex);
throw ex;
}
try
{
…
}
catch (IOException | SQLException ex)
{
logger.log(ex);
throw ex;
}
"Então agora podemos escrever várias exceções separadas por operadores OR ('|' é OR binário)?"
"Isso mesmo. Não é conveniente?"
"Hmm. Mas qual será o tipo do objeto de exceção dentro do bloco catch?"
"Afinal, uma IOException tem seus métodos e uma SQLException tem seus métodos."
"O tipo de exceção será o de sua classe ancestral comum."
"Ah. Em outras palavras, provavelmente será Exeption ou RuntimeException . Então, por que não simplesmente escrever catch(Exception e)?"
"Às vezes, ao lidar com erros individualmente, é conveniente agrupá-los, gravando alguns erros em um log, relançando outros e lidando com outros de alguma outra maneira."
"Em outras palavras, esse esquema é reconhecido como resolvendo o problema de blocos catch duplicados para lidar com erros diferentes."
"Ah. Entendi. Obrigada, Ellie."
"Isso não é tudo. Quero contar um pouco mais sobre o bloco final ."
"Como você provavelmente já sabe, este bloco é sempre executado."
"E quando digo sempre, quero dizer absolutamente sempre ."
"Por exemplo:"
try
{
return 1;
}
finally
{
return 0;
}
"Aqui há um retorno no bloco try e um retorno no bloco finalmente . Portanto, o valor de retorno desse método será o número 0."
"O bloco final será executado não importa o que aconteça. E sua instrução de retorno sobrescreve o outro valor de retorno com seu próprio valor."
"Eu vejo."
"No entanto, um método pode retornar um valor ou lançar uma exceção. "
"Portanto, se um valor for retornado em um bloco try, mas o bloco final lançar uma exceção , o resultado será uma exceção . "
"E se uma exceção for lançada no bloco try , mas o bloco final tiver uma instrução return?"
"Então é como se o método funcionasse corretamente e o valor na declaração de retorno fosse retornado.
Exemplo | Resultado |
---|---|
|
0 |
|
Exceção de tempo de execução |
|
0 |
|
IOException |
"A única razão pela qual o método final pode não ser executado seria o encerramento imediato do programa por uma chamada ao método System.exit() ;."
try
{
System.exit(0);
return 1;
}
finally
{
return 0;
}
"Eu vejo."
"Lembre-se de que todos esses tópicos geralmente são questionados em entrevistas, por isso seria bom para você entendê-los e lembrá-los."
GO TO FULL VERSION