2
respostas

AutoCloseable

Foi dito que as interfaces que são AutoCloseable como: Connection, Statement e ResultSet; quando abertas e atribuídas à uma variável dentro da definição de um try, são fechadas automaticamente.

EXEMPLO 1: try(Connection con = buscaConexao()) { // pronto, a conexão é fechada automaticamente pois Connection implementa AutoCloseable }

EXEMPLO 2: try() { Connection con = buscaConexao() }

Isso funciona conforme os dois exemplos acima ou apenas no Exemplo1? A atribuição tem que ser dentro do try ou pode ser no corpo do try?

Obrigado.

2 respostas

Somente funciona no segundo exemplo:

/** Certo **/
try {
  // bloco try
} catch (IOException ex) { // Exemplo de exception
  // bloco catch 1
} catch (SQLException sqlex) { // Exemplo de exception
  // bloco catch 2
} finally {
  // bloco que será sempre executado, independente 
  // se houve ou não exception e se ela foi tratada ou não
}
/** Errado
try(){
} **/

O Try não tem nenhum campo de parâmetro, ou seja, o parênteses não existe, para entender melhor tente traduzir as palavras em Inglês, no caso try seria +/- "fazer uma tentativa",

Logo nesta tentativa se lançar um exceção vai para o catch (pegar), então no catch tem o parâmetro onde irá pegar aquela exceção informada.

No finally você informa o que é para ser feito após todo código, exemplo:

  • Quando você tentou abrir uma conexão com banco de dados, então após utilizar aquela conexão você irá finalizar a conexão fechando ela no finally.

  • Você tem que salvar um arquivo, ele abre o arquivo para poder escrever nele, após escrever todo os dados deve fechar a escrita do arquivo caso contrário poderá ficar gravando "sujeira" do sistema no arquivo, podendo o arquivo ficar enorme.

EXEMPLO 1: try(Connection con = buscaConexao()) { // pronto, a conexão é fechada automaticamente pois Connection implementa AutoCloseable }

este seu primeiro exemplo funciona sim, ele abre no inicio e fecha no fim dele.

no exemplo 2 é necessário se chamar o método close().

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software