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

Finally e instanciamento da variável antes do bloco try

Olá pessoal!

O professor escreveu o código da seguinte forma:

public static void main(String[] args) {
    Conexao con = null;
    try {
        con = new Conexao();
        con.leDados();
    } catch(IllegalStateException ex) {
        System.out.println("Deu erro na conexao");
    } finally {
        con.fecha();
    }
}

Sobre esse trecho, vi que se eu criar um objeto Conexao antes mesmo do bloco try, no caso substituindo o "null" por "new Conexao()", o código também compila(Segue o exemplo abaixo):

public static void main(String[] args) {
    Conexao con = new Conexao();
    try {
        con.leDados();
        //resto da implementação...
        }
}

Isso seria uma má prática? Posso fazer dessa maneira, ou se fosse em um projeto maior me traria algum problema posteriormente?

Também tive uma outra dúvida, com relação ao bloco finally. Testando aqui, também vi que se eu chamasse o método fecha() depois do catch mas sem abrir o bloco finally, o código também compilaria e me entregaria a mesma execução(Segue o exemplo):

public static void main(String[] args) {
    Conexao con = null;
    try {
        con = new Conexao();
        con.leDados();
    } catch(IllegalStateException ex) {
        System.out.println("Deu erro na conexao");
    }
    // chamando o método sem o bloco finally
        con.fecha();

}

Isso também seria uma má prática, ou também pode ser usado? Se sim, quais os problemas que eu poderia enfrentar mais pra frente a medida que meu código vai crescendo?

Nos dois casos (instanciar a classe antes do try ou não, e chamar o método sem usar o finally ou não), qual seria a abordagem mais correta?

2 respostas
solução!

Oie Luis,

  1. Sim vai funcionar,
  2. Sim é uma má prática.

A função do try cath é fazer tratamento de excessão, ou melhor é cuidar para que um erro de conexão, execução não estoure na tela. Dentro do try é o caso de sucesso Dentro do cath é quando há uma excessão, um erro E o finally é o que faz por último, no caso fecha a conexão.

Se tu deixar fora do try vai funcionar, mas se por algum motivo não se conecte ao banco, vai explodir na tela um erro incrível. Então o try deixa esse erro mais bonitinho mandando para o cath e lá você configura ele de várias maneiras para apresentar na tela uma mensagem bonita de erro de conexão por exemplo.

Estuda mais afundo cada fundamento, tenta 3 materiais diferentes e vai entender mais a fundo o mundo da programação!!!

Obrigado pela explicação Fabio!