Como usar uma instrução try java com recursos

Imagine um programa Java que recebe entrada de dois arquivos diferentes ou de um Scanner

e um arquivo de disco. Para certificar-se de que você limpar corretamente, você colocá 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.


Publicações relacionadas