import javax.management.RuntimeErrorException;
abstract class Conta {
// private double saldo;
protected double saldo;
public double getSaldo() {
return this.saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public boolean saca(double valor_saque) throws Exception {
if (this.saldo < valor_saque) {
//return false;
throw new SaldoInsuficienteException(saldo);
}
else {
this.saldo = this.saldo - valor_saque;
return true;
}
}
// public void deposita(double valor_dep) {//use este formato quando a classe filha de RuntimeException
public void deposita(double valor_dep) throws ValorInvalidoException {//use este formato quando a classe filha de Exception
// if (valor_dep > 0) {// neste formato utiliza a exeption do java
// this.saldo += valor_dep;
// }
// else {
// throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
// }
if (valor_dep > 0) {// neste formato utiliza a exeption pelo programador
this.saldo += valor_dep;
}
else {
throw new ValorInvalidoException(valor_dep);
}
}
//public void atualiza(double taxa) {
// this.saldo += (this.saldo * taxa);
// };
abstract public void atualiza(double taxa);
}
----
class ContaCorrente extends Conta implements Tributavel {
public void atualiza(double taxa) {
this.saldo += this.saldo * taxa * 2;
}
@Override
public double calculaTributos() {
return this.getSaldo() * 0.01;
}
}
--
class ContaPoupanca extends Conta {
public void atualiza(double taxa) {
this.saldo += this.saldo * taxa * 3;
}
public void deposita(double valor) {
this.saldo += valor - 0.10;
}
}
--
class TestaContas {
public static void main(String[] args) {
// Conta c = new Conta(); //este codigo não funciona porque a classe Conta passou a ser abstrata
ContaCorrente cc = new ContaCorrente();
ContaPoupanca cp = new ContaPoupanca();
// c.deposita(1000);
//cc.deposita(1000);
// cp.deposita(1000);
//
try {
cc.deposita(-1000);
}
// catch (IllegalArgumentException e) {// neste formato utiliza excption do java
catch (ValorInvalidoException e) {
//System.out.println("Você tentou depositar um valor inválido na sua conta corrente");
System.out.println(e.getMessage()); //utilizando mensagem ca classe ValorInvalidoException
}
try {
cp.deposita(-1000);
}
// catch (IllegalArgumentException e) {// neste formato utiliza excption do java
catch (ValorInvalidoException e) {
//System.out.println("Você tentou depositar um valor inválido na sua conta poupança");
System.out.println(e.getMessage());
}
//
// c.atualiza(0.01);
cc.atualiza(0.01);
cp.atualiza(0.01);
//
try {
cc.saca(10000);
System.out.println("Saque Efetudado com sucesso");
} //catch (RuntimeException e) {pode ser assim
catch (SaldoInsuficienteException e) { //ou assim -- usando a classe cariada por nós
//System.out.println(cc.getSaldo() + " Saldo insufuciente");
System.out.println(cc.getSaldo() + " Saldo insufuciente");
}
catch (Exception e) { //ou assim
//System.out.println(cc.getSaldo() + " Saldo insufuciente");
System.out.println("Ocorreu um erro indeterminado");
}
// System.out.println(c.getSaldo());
System.out.println(cc.getSaldo());
System.out.println(cp.getSaldo());
System.out.printf("O saldo cc é: %.2f", cc.getSaldo());
System.out.printf("O saldo cp é: %.2f", cp.getSaldo());
}
}
Por que a classe TestaConta esta apresentando erro apenas no "catch" cp.deposita
try { cc.deposita(-1000); } // catch (IllegalArgumentException e) {// neste formato utiliza excption do java catch (ValorInvalidoException e) { //System.out.println("Você tentou depositar um valor inválido na sua conta corrente"); System.out.println(e.getMessage()); //utilizando mensagem ca classe ValorInvalidoException }
try { cp.deposita(-1000); } // catch (IllegalArgumentException e) {// neste formato utiliza excption do java catch (ValorInvalidoException e) { //System.out.println("Você tentou depositar um valor inválido na sua conta poupança"); System.out.println(e.getMessage()); }
Unreachable catch block for ValorInvalidoException. This exception is never thrown from the try statement body