Duvida Excecao + finally

3 respostas
H

Seguinte, to tentando usar o esquema de excecao numa funcao de uma classe minha, na teoria blz td claro, entao fui fazer um teste besta p ver se funcionava…nesse exemplo, eu trato uma exececao geral (a Exception) e lanco uma excecao especifica (uma q criei) dentro do catch da excecao geral e dps uso um finally p fechar os recuros ou retornar o valor do retorno…

A aplicacao teste eh bem simples, pega 2 numeros e divide, se o denominador n for zero, n lanca excecao, porem se o denominador for zero, lanca a excecao. O problema eh q qnd executo o codigo abaixo, sem gerar execao ele pega blz, mas qnd gera a excecao ai, o metodo divisao n esta lancando a NumeroException p o metodo “Main” e em consequencia, ele n escreve o “Exception no main!” (mas era p escrever nao?)…porem qnd retiro o finally, ele pega ok e lanca a excecao p “Main”…so q preciso lancar a excecao especifica e usar o finally p liberar recursos na minha aplicacao, alguem me dar uma luz ai como fazer esse danado lancar essa excecao especifica (NumeroException) e executar o finally

Os codigos…

Classe Main q chama a divisao

package excecao_teste;

public class Main {

    public static void main(String[] args) {
        try {
            int divisao = Funcao.divisao(2, 0);
            System.out.println("Divisao = " + divisao);
        } catch (NumeroException ex) {
            System.out.println("Exception no main!");
        }
    }

}

Classe Divisao q executa a divisao e lanca excecao caso o denominador seja 0

package excecao_teste;

public class Funcao {

    public static int divisao(int num1, int num2) throws NumeroException {
        int resultado = -1;
        
        try {
             resultado = num1 / num2;
             //return resultado;
        } catch (Exception e) {
            e.printStackTrace();
            throw new NumeroException();
        } 
        finally {
            System.out.println("executou finally");
            return resultado;
        }
        
    }

Classe NumeroException, q eh a classe da Excecao Especifica

package excecao_teste;

public class NumeroException extends Exception { 

}

Bem eu acho q n fiz nd d anormal, ou fiz?

3 Respostas

H

arrumei, coloquei o return fora do finally, dps do bloco finally e pegou blz…

psandrelli

O finally é executado de qualquer jeito, ocorrendo excessão ou não.
Se vc tiver uma sessão aberta, por exemplo, depois do processamento dentro do try-catch, vc pode colocar o fechamento dessa sessão dentro de finally.
O fechamento de uma conexão com banco pode se colocada dentro do finally também.
Dentro do finally vai ser executado qualquer comando.

H

eh eu notei isso, o problema eh q n eh legal por return dentro do finally, pois ele quebra o resto, nesse caso o lancamento da excecao…entao como regra fica: finally executa sempre, e n se poe return dentro do finally, a n ser q saiba o q esteja fazendo…flw…vlw…

Criado 6 de maio de 2008
Ultima resposta 6 de mai. de 2008
Respostas 3
Participantes 2