A chave finalmente Java é geralmente usada com a tentativa Exemplo para ilustrar:
classe pública TryandfinallyTest {public static void main (string [] args) lança exceção {Try {int a = testFinally (2); ) {int b = testFinally (1); b); : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the :::::::::::::::::::::::::here ::::::: tente escopo se o programa lança uma exceção ou outra interrupção, o conteúdo de finalmente será executado (i) {Caso 1: ++ I; Break; // O Programa termina normalmente 2: Lanke New Exception ("Exceção em Teste"); ("Finalmente chegando quando eu ="+sinalizador);
Os resultados da execução são os seguintes
Finalmente chegando quando eu = 2Finalmente chegando quando eu = 1 o resultado retornou normalmente b: 2Finalmente chegando quando eu = 3break retorna Resultado: 3 Finalmente chegando quando eu = 4 return retorna resultado: -1
O resultado mostra que, independentemente da situação acima, o bloco finalmente será sempre executado.
Comparado a outros modelos de idiomas, a palavra -chave finalmente é a melhor adição ao modelo de manuseio de exceção de Java. A estrutura finalmente permite que o código sempre seja executado, independentemente de ocorrer a exceção. Use finalmente para manter o estado interno de um objeto e limpar os recursos não-memórias. Sem finalmente, seu código será confuso. Por exemplo, o código a seguir ilustra como você deve escrever código para recursos não-memórias gratuitos sem usar finalmente:
importar java.net.*; .ACECT ();
Este código cria um soquete e chama o método de aceitação. Antes de sair do método, você deve fechar este soquete para evitar vulnerabilidades de recursos. Para realizar essa tarefa, chamamos de fechamento em // 2, que é a última declaração do método. Mas o que acontece se ocorrer uma exceção no bloco de tentativas? Nesse caso, a chamada fechada em // 2 nunca acontece. Portanto, você deve pegar essa exceção e inserir outra chamada para fechar em // 1 antes de reemitir esta exceção. Isso garante que o soquete seja fechado antes de sair do método.
Escrever código como esse é complicado e propenso a erros, mas é essencial sem finalmente. Infelizmente, em idiomas sem um mecanismo finalmente, os programadores podem esquecer de organizar seu código dessa maneira, resultando em vulnerabilidades de recursos. A cláusula finalmente em Java resolve esse problema. Com finalmente, o código anterior pode ser reescrito no seguinte formulário:
importar java.net.*; .ACECT ();
O bloco finalmente garante que o método de fechamento seja sempre executado, independentemente de uma exceção ser emitida dentro do bloco de tentativa. Portanto, é garantido que o método de fechamento seja sempre chamado antes de sair do método. Dessa forma, você pode ter certeza de que o soquete está fechado e que você não vazou recursos. Não há necessidade de outro bloco de captura neste método. O bloco de captura é fornecido no primeiro exemplo apenas para fechar o soquete, agora é fechado finalmente. Se você fornecer um bloco de captura, o código no bloco finalmente será executado após o término do bloco de captura.
O bloco finalmente deve ser usado com o bloco de tentativa ou experimente/captura. Além disso, não é possível sair do bloco de tentativa sem executar seu bloco finalmente. Se o bloco finalmente existir, ele sempre será executado. (Esta declaração está correta a partir desse ponto de vista. Existe uma maneira de sair do bloco de tentativa sem executar o bloco finalmente. Se o código executar um sistema.Exit (0); instrução dentro da tentativa, o aplicativo termina sem execução finalmente a execução Por outro lado, se você desligar o poder durante a execução do bloco de tentativa, finalmente não o fará.