Um erro será detectado pelo bloco Catch em Java?

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.