Sobes.tech
Junior — Middle

Haverá um erro de compilação ao dividir por zero num bloco try se catch retornar uma exceção e finally retornar a string "finally"?

sobes.tech IA

Resposta da IA

Em Java, ao dividir por zero para tipos inteiros, ocorre uma exceção ArithmeticException. Se isso acontecer dentro de um bloco try, e uma outra exceção for lançada no bloco catch, e houver uma instrução return no bloco finally, então o valor do finally será retornado, e as exceções serão suprimidas.

Exemplo:

public String test() {
    try {
        int a = 1 / 0; // ArithmeticException
    } catch (Exception e) {
        throw new RuntimeException("Erro no catch");
    } finally {
        return "finally";
    }
}

Neste código, o método retornará a string "finally" e não lançará exceção, pois o return no finally sobrescreve as exceções de try e catch. Não ocorrerá erro de compilação, mas esse comportamento pode levar à perda de informações sobre erros e é considerado uma má prática.