Um erro será detectado pelo bloco Catch em Java?
1. Visão geral
Neste breve artigo, mostraremos como detectar erros de Java de maneira adequada e explicaremos quando não faz sentido fazer isso.
Para obter informações detalhadas sobreThrowables em Java, dê uma olhada em nosso artigo emException Handling in Java.
2. Capturando erros
Visto que a classejava.lang.Error em Java não herda dejava.lang.Exception, devemos declarar a classe baseError - ou a subclasseError específica que gostaríamos de capturar - em a instrução catch para capturá-la.
Portanto, se executarmos o seguinte caso de teste, ele passará:
@Test(expected = AssertionError.class)
public void whenError_thenIsNotCaughtByCatchException() {
try {
throw new AssertionError();
} catch (Exception e) {
Assert.fail(); // errors are not caught by catch exception
}
}
O seguinte teste de unidade, no entanto, espera que a instrução catch capture o erro:
@Test
public void whenError_thenIsCaughtByCatchError() {
try {
throw new AssertionError();
} catch (Error e) {
// caught! -> test pass
}
}
Observe quethe Java Virtual Machine throws errors to indicate severe problems from which it can’t recover, como falta de memória e estouro de pilha, entre outros.
Portanto,, we must have a very, very good reason to catch an error!
3. Conclusão
Neste artigo, vimos quando e comoErrors pode ser capturado em Java. O exemplo de código pode ser encontrado emthe GitHub project.