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

Duvida ao aplicar somente o Exception

Pessoal, poderiam me ajudar com esta duvida?

Fiz a mudança no meu código trocando o RuntimeException pelo Exception, e meu programa apresenta um erro e meu IDE não reporta nada de anormal, o erro começa na linha do método deposita onde uso o throw new ValorInvalidoException:

void deposita(double valorASerDepositado) throws ValorInvalidoException { //usamos o void pois nao especificamos
            if(valorASerDepositado < 0){
                //throw new IllegalArgumentException("Voce tentou depositar um valor negativo"); //usando metodo do Java Exception
                throw new ValorInvalidoException(valorASerDepositado); //usando um Exception criado na classe ValorInvalidoException
            }
            else {
                this.saldo += valorASerDepositado * 0.1;
            System.out.println("====================================\nDeposito de " + valorASerDepositado + " feito com sucesso");
            }
        }

No meu método main eu tenho a chamado de Exception:

package projetoBanco;

public class Programa {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {

Segue a minha classe ValorInvalidoException:

package projetoBanco;

public class Programa {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
4 respostas

A classe ValorInvalidoException não veio, acabou vindo duas vezes a mesma da main. Pode mandar pra gente?

E quando diz que apresenta erro, qual erro?

Olá Paulo, obrigado pelo suporte, segue a classe ValorInvalidoException:

package br.com.projeto.banco.excecoes;

@SuppressWarnings("serial")
public class ValorInvalidoException extends Exception{
    private double valorInvalido;



    public double getValorInvalido() {
        return valorInvalido;
    }

    public ValorInvalidoException(double valorInvalido){
        super("Operacao invalida.\nValor usado na operacao: " + valorInvalido);
    }
}

O erro fica na linha do método deposita:

throw new ValorInvalidoException(valorASerDepositado);

Log do console:

Exception in thread "main" br.com.projeto.banco.excecoes.ValorInvalidoException: Operacao invalida.
Valor usado na operacao: -500.0
    at br.com.projeto.banco.modelos.Conta.deposita(Conta.java:92)
    at br.com.projeto.banco.modelos.ContaCorrente.deposita(ContaCorrente.java:1)
    at br.com.projeto.banco.programas.Programa.main(Programa.java:65)

Obrigado mais uma vez, abraços

solução!

Yuri, o curioso era que esse é o resultado esperado :). Isto é, seu código está correto.

Quando você lança a exception e ninguém da try/catch, ela acaba chegando até o main e parando a execução dessa thread nesse caso.

E repare que isso é bom: se houve um problema grave no seu código e ningum se programou para tratar isso, é melhor que o programa pare do que continue executando em uma condição não esperada.

Caso você não queira que isso ocorra, deve utilizar o try/catch no local onde você acha que, a partir dali, tal situação excepcional estaria resolvida.

Bem estranho mesmo Paulo. Mas trabalhando com o try/catch o programa é tratado corretamente sem nenhum erro. Foi uma situação boa para entender quando usar um e usar outro, trabalhar com as possibilidades. Muito obrigado pela ajuda. :)