1
resposta

EXCEPTION NO CONSTRUTOR

Boa tarde,

Notei que quando há uma exceção no construtor, mesmo com o try-with-resources, não é possível fechar a conexão. Como eu posso fazer para fechar a conexão mesmo quando o construtor lança uma exceção?

package alura.entities.Conexao;

public class Conexao implements AutoCloseable{
    public Conexao() {
        System.out.println("Abrindo conexão");
        throw new IllegalStateException("ERRO");
    }
package alura.main;

import alura.entities.Conexao.Conexao;

public class Teste {
    public static void main(String[] args) {
        try (Conexao conexao = new Conexao()) {
            conexao.leDados();
        } catch(IllegalStateException ex) {
            System.out.println("Deu erro na conexão");
        }
    }
}

Obrigado pela atenção :)

1 resposta

Olá, Álvaro! Tudo bem contigo?

Desculpe a demora em dar um retorno!!!

Dentro da estrutura temos um construtor e dois métodos

    public Conexao() {
        System.out.println("Abrindo conexao");
        throw new IllegalStateException();
    }

    public void leDados() {
        System.out.println("Recebendo dados");
        throw new IllegalStateException();
    }

    @Override
    public void close(){
        System.out.println("Fechando conexao");

    }

No método close esperamos que ele retorne a frase por estar sobrescrevendo o método da ClasseAutoCloseable, porém não ocorre.

Isso aconteceria se comentássemos o IllegalStateException que está no contrutor, mas não ocorre pois o objeto não é criado

Ele entra no construtor e já recebe a Exception fazendo com que pule para o catch e lance a frase "Deu erro na conexão"

O que pode acabar confundindo é que a frase "Abrindo conexao" já é exibida, porém o Objeto não é criado por causa da Exception

Só é criado quando comentamos a Exception.

Uma dica interessante, busque sempre utilizar o Debbug da IDE.

Para isso, basta colocar o ponto em que o debbug irá iniciar

Ponto de Debbug

Depois, inicie o Debbug conforme abaixo

Inicio do Debbug

E por fim, segue abaixo os comandos para seguir ação por ação até o término do Debbug

Comandos para o Debbug

Espero ter ajudado, Álvaro

Qualquer dúvida, nos retorne!

Um abraço!!!