Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Lançamento de erro com "throws ValorInvalidoException"

Não entendi direto o funcionamento do throws junto ao método, como citado no exercício e não entendi a explicação que cita uso de throws junto/ou/ao invés de try/catch.

Quando criei minha classe de exceção e herdei de "RuntimeException", entendo que essa classe está já implementada/instanciada/atribuida e isso não ocorre com a classe "Exception", é isso? Porque uma exige um monte de coisa pra funcionar e a outra é só usa/herdarr? Não ficou claro isso pra mim.

Outra coisa, Porque quando passo a herdar a classe "Exception", se exige o uso do "throws"? O que o uso de "throws" muda para o Java ou pra que ele serve? Se usa apenas nos métodos ou usa em outras partes?

Além disso, tentei compilar o código usando a herança com "Exception" e as modificações citadas. Mesmo colocando "throws ValorInvalidoException" no método "deposita", o Eclipse me informa que preciso colocar o seguinte parâmetro para funcionar:

private static final long serialVersionUID = 1L;

Ao colocar, ele aceitou compilar e funcionou, caso contrário não funcionava. Porque?

Abaixo segue como ficou os arquivos com a implementação que cito acima:

ValorInvalidoException.JAVA

public class ValorInvalidoException extends Exception {
    private static final long serialVersionUID = 1L;

    ValorInvalidoException(double valor){
        super("Valor valido: " + valor);
    }
}

Conta.JAVA

    public void deposita(double valor) throws ValorInvalidoException {
        if (valor < 0.0) { 
            throw new ValorInvalidoException(valor);
        } 
        else {
            this.saldo += valor;
        }
    }

MAIN

        try {
            ContaCorrente j = new ContaCorrente();
            j.deposita(-100.0);
            System.out.println(j.getSaldo());
        }
        catch (ValorInvalidoException e) {
            System.out.println(e.getMessage());
        }
1 resposta
solução!

Olá Alessandro,

Nós temos exceções que chamamos de checked e outras de unchecked. O que acontece é que nas exceções do tipo checked, somos obrigados pelo compilador a tratá-las com o uso de try/catch, caso não quisermos trata-la naquele ponto, podemos lança-la para quem está chamando aquele método e lá temos que tomar essa decisão novamente de tratar ali mesmo ou passar ela para quem invocou, nesse caso usamos a palavra throws indicando que queremos passar essa responsabilidade de tratar para quem chamou. Já no caso das exceções unchecked o compilador não nos obriga a trata-la. Quando estamos falando de unchecked exceptions, estamos falando de RuntimeException e suas filhas, enquanto a classe Exception e suas filhas (com exceção de RuntimeException) são checked exceptions. Quanto ao serialVersionUID ele não é obrigatório, o eclipse só lança um warnning indicando que vc pode redefinir esse número. Para o caso em questão ele não servirá para você nesse momento, se quiser mais detalhes existe um post detalhado aqui: http://blog.caelum.com.br/entendendo-o-serialversionuid/