Vídeo: 6 RECURSOS FAVORITOS do SQLDBX 2024
Imagine um programa Java que recebe entrada de dois arquivos diferentes ou de um
Scanner
e um disco Arquivo. Para garantir que você limpe corretamente, você coloca
fechar chamadas de método
em uma cláusula
finalmente
.
importar java. io. Arquivo;
importar java. io. IOException;
importar java. util. Scanner;
classe pública Principal {
public static void main (String args []) {
Scanner scan1 = null;
Scanner scan2 = null;
tente {
scan1 = novo Scanner (novo Arquivo ("File1. Txt"));
scan2 = novo Scanner (novo Arquivo ("File2. Txt"));
// Faça coisas úteis
} catch (IOException e) {
// Ops!
} finalmente {
scan1. fechar();
scan2. fechar();
Sistema. Fora. println ("Feito!");
}
}
}
Em teoria, o computador sempre executa
scan1. fechar ()
e
scan2. fechar ()
não importa o que dê errado durante a execução da cláusula
tentar
. Mas essa é a teoria. Na realidade, outro programador (não você, é claro) pode modificar o código fechando
scan1
no meio da cláusula
try
:
tente {
scan1 = novo Scanner (novo Arquivo ("File1. Txt"));
scan2 = novo Scanner (novo Arquivo ("File2. Txt"));
// Faça coisas úteis, mas também …
scan1. fechar();
scan1 = null;
} catch (IOException e) {
// Oops!
} finalmente {
scan1. fechar();
scan2. fechar();
Sistema. Fora. println ("Feito!");
}
Agora você tem uma situação real. Dentro da cláusula
finalmente
, o valor de
scan1
é
null
. A chamada para
scan1. close ()
falha, então o programa lança um
NullPointerException
e pára de ser executado antes de atingir a chamada para
scan2. fechar ()
. Na pior das circunstâncias,
scan2
não está fechado e seu programa tem
File2. txt
bloqueado para que nenhum outro programa possa usar o arquivo.
Quando um programa usa vários recursos (muitos arquivos, um banco de dados e um arquivo, ou o que quer que seja), o acúmulo de declarações
tentar
torna-se bastante complicado. Você pode fazer
tentar
declarações dentro de
catch
cláusulas e todos os tipos de combinações loucas. Mas o Java tem uma maneira melhor de resolver o problema: no Java 7 (e versões posteriores de Java), você pode criar uma declaração de tentativa com recursos. Este código mostra como.
importar java. io. Arquivo;
importar java. io. IOException;
importar java. util. Scanner;
public class NewMain {
public static void main (String args []) {
try (Scanner scan1 = new Scanner (novo arquivo ("File1.txt "));
Scanner scan2 = new Scanner (novo arquivo (" File2. txt ")) {
// Faça coisas úteis
} catch (IOException e) {
// Oops v
}
Sistema. out. println ("Done!");
}
}
Neste código, as declarações de
scan1
e
scan2
estão entre parênteses após a palavra
tentar
. As declarações entre parênteses indicam ao Java que feche
scan1
e
scan2
automaticamente após a execução das instruções no > tente
. Você pode declarar vários recursos dentro dos parênteses de uma instrução
tentar
. Ao fazê-lo, o Java fecha todos os recursos automaticamente após a execução das instruções da cláusula
tentar
. Você pode adicione as cláusulas
catch
e uma cláusula
finalmente
, se desejar. Você pode acessar todos os tipos de recursos (arquivos, bancos de dados, conexões para servidores e outros) e ter a paz de espírito sabendo que O Java irá separar as conexões automaticamente.
A vida é boa.