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());
}