Como usar uma instrução try java com recursos
Imagine um programa Java que recebe entrada de dois arquivos diferentes ou de um Scanner
Conteúdo
fechar
método chama em um finalmente
cláusula.importação java.io.File-
importação java.io.IOException-
importação java.util.Scanner-
public class principal {
void main (args String []) public static {
Scanner scan1 = nulo
Video: Try Catch em Java por Marco Antônio
Scanner Scan2 = nulo
experimentar {
scan1 = new Scanner (new File ("file1.txt")) -
Scan2 = new Scanner (new File ("file2.txt")) -
// Do material útil
} Catch (IOException e) {
// Ops!
} finalmente {
scan1.close () -
scan2.close () -
Video: Manejo de ArithmeticException Java con Try/Catch, "método B"
System.out.println ("Feito!") -
}
}
}
Em teoria, o computador sempre executa scan1.close ()
e scan2.close ()
não importa o que der errado durante a execução do experimentar
cláusula. Mas isso é teoria. Na realidade, um outro programador (não você, é claro) pode modificar o código de fechamento scan1
no meio do experimentar
cláusula:
experimentar {
scan1 = new Scanner (new File ("file1.txt")) -
Scan2 = new Scanner (new File ("file2.txt")) -
// Do material útil, mas também ...
scan1.close () -
scan1 = nulo
} Catch (IOException e) {
// Ops!
} finalmente {
Video: 10.3 Exception Handling in Java Practical Part 2 Try with Multiple Catch Unchecked
scan1.close () -
scan2.close () -
System.out.println ("Feito!") -
}
Agora você tem uma situação real. Dentro de finalmente
cláusula, o valor de scan1
é nulo
. A chamada para scan1.close ()
falhar, para que o programa lança uma Null Pointer Exception
e pára de funcionar antes de alcançar a chamada para scan2.close ()
. Na pior das hipóteses, Scan2
não está fechada e seu programa tem file2.txt
trancado para que nenhum outro programa pode usar o arquivo.
Quando um programa usa vários recursos (muitos arquivos, banco de dados e um arquivo, ou qualquer outro) o acúmulo de experimentar
declarações torna-se bastante complicado. Você pode fazer experimentar
instruções dentro pegar
cláusulas e todos os tipos de combinações malucas. Mas Java tem uma maneira melhor de resolver o problema: Em Java 7 (e versões posteriores do Java), você pode criar um tente-com-recursos comunicado. Este código mostra como você.
importação java.io.File-
importação java.io.IOException-
importação java.util.Scanner-
NewMain classe pública {
void main (args String []) public static {
tente (scan1 Scanner = new Scanner (new File ("file1.txt")) -
Scan2 Scanner = new Scanner (new File ("file2.txt"))) {
// Do material útil
} Catch (IOException e) {
// Ops! V
}
System.out.println ("Feito!") -
}
}
Video: Java Video Tutorial 6
Neste código, as declarações de scan1
e Scan2
estão entre parênteses após a palavra experimentar
. As declarações entre parênteses dizer Java para fechar scan1
e Scan2
automaticamente após a execução das declarações no experimentar
cláusula. Você pode declarar vários recursos dentro de um experimentar
parênteses da declaração. Quando o fizer, Java fecha todos os recursos automaticamente após a execução do experimentar
As declarações de cláusula. Você pode adicionar pegar
cláusulas e um finalmente
cláusula, se quiser. Você pode acessar todos os tipos de recursos (arquivos, bancos de dados, conexões para os servidores, e outros) e ter paz de espírito sabendo que Java vai cortar as conexões automaticamente.
A vida é boa.