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

Exception - falhas e dúvidas

Tenho dois problemas:

  1. Mesmo passando um valor para saque válido (ou seja, um valor menor que o meu saldo) a exception é chamada (?);
public class TestaConta {

    public static void main(String[] args) {

        Conta joao = new ContaCorrente();

        joao.deposita(50);

        try {
            joao.saca(30.0);
        } catch(SaldoInsuficienteException e) {
            System.out.println(e.getMessage());
        }

        catch(Exception e) {
            System.out.println("um outro erro");
        }


        System.out.println(joao.getSaldo());


    }

}
public class SaldoInsuficienteException extends RuntimeException {

    private final double saldoAtual;
    private static final long serialVersionUID = 1L;

    public SaldoInsuficienteException(double saldoAtual) {
        super("Saldo insuficiente * " + saldoAtual);
        this.saldoAtual = saldoAtual;
    }

    public double getSaldoAtual() {
        return saldoAtual;
    }


}

2 - Não consigo inserir a exception RuntimeException() no metodo saca da classe conta. Não compila.

public abstract class Conta {
    protected String nome;
    protected double saldo;

    public void setNome(String nome) {
        this.nome = nome;

    }

    public void deposita(double valor) {
        this.saldo += valor;
    }

    public void saca(double valor) {
        if(saldo >= valor) {
            this.saldo -= valor;
        }

        throw new SaldoInsuficienteException(saldo);
        throw new RuntimeException(); // << erro aqui

    }

    public abstract void atualiza(double taxa);

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    public double getSaldo() {
        return this.saldo;
    }

}
5 respostas
solução!

Opa, você não interrompeu o fluxo depois de sacar.

public void saca(double valor) {
        if(saldo >= valor) {
            this.saldo -= valor;
        } else {
            throw new SaldoInsuficienteException(saldo);
        }
    }

humm entendi. E quanto ao RuntimeException?

Provavelmente dava erro de compilação ali... como você já lança uma exception, a execução nunca chegaria na próxima linha.

Certo, mas isso vai contra a explicação do Guilherme, ele disse que é possível lançar mais de uma, na verdade acho que na própria video-aula ele faz isso . Vou mandar o e-mail pra alura. Valeu!

Opa, acho que foi apenas um mal entendido. Guilherme explicou que um método pode lançar uma exception ou outra no mesmo método, não duas ao mesmo tempo. A explicação dele está correta :).