Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 14 da Aula 5 - Exceções e controle de erros

Qual a diferença entre eu usar o finally e simplesmente deixar código ao final? Ambos não serão executados nas mesmas ocasiões?

[1]
try { ... }
catch (Exception e) { ... }
finally { // codigo dentro do finally }

[2]
try { ... }
catch {Exception e} { ... }
// código sem finally
2 respostas
solução!

Negativo. Quando um código é escrito dentro do finally, independente da exceção que ocorrer o bloco de instrução será executado. Experimente executar o código abaixo:

public static void main(String[] args) {
        Conta cp = new ContaCorrente();        
        try {
            cp.deposita(Double.parseDouble("abc"));
        } catch (ValorInvalidoException e) {
            System.out.println(e.getMessage());
        } finally {
            System.out.println("Acabou com o finally");
        }
        System.out.println("Acabou sem o finally");
    }

Neste caso, a exceção ValorInvalidoException apenas trata valor negativos, e como estou passando uma String na chamada do método deposita, a execução do main será interrompida. Com o finally é possível inserir determinado código que será executado independente da exceção que ocorrer.

Testado e compreendido agora. Muito obrigado.