2
respostas

TestaContaComExcecaoChecked ok apenas com throws MinhaExcecao e nao Try Catch

Segundo o video, a classe TestaContaComExcecaoChecked deveria estar ok somente com o try e catch. Porem, meu Eclipse informa um erro e a sugestao fornecida é colocar o throws MinhaExcecao na assinatura do método. Alguma idéia do motivo desse erro?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Codigo apos alteraçao:

public class TestaContaComExcecaoChecked {

    public static void main(String[] args) throws MinhaExcecao {

        Conta c = new Conta();
        c.deposita();

    }

}

Nao sei se tem a ver mas coloquei na classe MinhaExcecao extends RuntimeException e funcionou o try catch.

public class MinhaExcecao extends RuntimeException { //exception checked

    public MinhaExcecao(String msg) {
        super(msg);
    }
}

Antes tinha colocado MinhaExcecao extends Exception como no video e o Eclipse me forçava a colocar o throws MinhaExcecao na assinatura do método.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Obrigada!

2 respostas

xxxxx

Oi Neila, ao que me parece, o método deposita() da sua classe Conta não deve lançar nenhuma exceção e por isso o compilador reclama.. veja, você utiliza o try/catch quando vai executar algum código que pode dar "zebra" e que, devido a isso, pode ser lançada uma exceção em tempo de execução...

Veja se o seu método deposita() possui alguma exceção na assinatura dele... abaixo, vou deixar um exemplo bem básico do que estou dizendo, espero que ajude..

A classe da exceção:

public class MinhaExcecao extends Exception {

    private static final long serialVersionUID = 1L;

    public MinhaExcecao(String msg) {
        super(msg);
    }

}

A classe conta, onde o método deposita() tem um tratamento que pode lançar uma exceção:

public class Conta {

    /*
     * Poderia existir qualquer outra coisa....
     */

    public void deposita(int valor) throws MinhaExcecao {
        if(valor <= 0) {
            throw new MinhaExcecao("valor inválido!");
        }
        /*
         * Caso não lance exceção, será executada a lógica do método...
         */
    }
}

Classe do teste:

public class TestaConta {

    public static void main(String[] args) {

        Conta c = new Conta();

        try {
            c.deposita(500);
        } catch (MinhaExcecao e) {
            e.printStackTrace();
            /*
             * Outros tratamentos que forem necessários...
             */
        }

    }
}

Se você tentar passar algum valor igual ou menor que zero, será lançada uma exceção... mas o que importa é que como o método deposita() possui uma exceção do tipo checked em sua assintura, você deve executá-lo com um try/catch ou lançar novamente a exceção adiante, nesse caso, para o método main...