Final: Desativar interruptores polimórficos ~
Modificar variáveis: as variáveis não podem ser alteradas
Modificar classe: as aulas não podem ser herdadas
Método de modificação: o método não pode ser reescrito
Finalmente: o último bloco de declaração usado no processamento de exceções
Se uma exceção é gerada ou não, deve ser executada ~~~
Código Java
Public Final Class FinalmenteTest {public static void main (string [] args) {try {lança novo nullPointerException (); } catch (nullPointerException e) {System.out.println ("O programa lança uma exceção"); } finalmente {System.out.println ("O bloco de declaração finalmente foi executado"); }}}Uso de palavras -chave finalmente em java
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.*; importar java.io. tente {soquete soquete = ss.accept (); // outro código aqui ...} catch (ioexception e) {ss.close (); // 1 jogue e; } // ... ss.close (); // 2}}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.*; importar java.io. tente {soquete soquete = ss.accept (); // outro código aqui ...} finalmente {ss.close (); }}}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 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 executar a execução finalmente. Por outro lado, se você desligar durante o bloco de tentativa, finalmente não será executado.)