Razões e cenários para usar tentativa e finalmente não usando a captura
No kit de ferramentas de concorrência do JDK, muitos manipulações de exceção usam a seguinte estrutura, como o AbstractExecTerService, ou seja, só há tentativa e finalmente não há captura.
classe X {private ReentrantLock Lock = new Reentrantlock (); desbloqueio ()}}}Por que usar essa estrutura? Quais são os benefícios? Veja o seguinte código primeiro
public void testtry efinally (nome da string) {try {name.length (); // nullPointerException} finalmente {System.out.println ("aa");O resultado da execução da passagem nula O método é: imprima AA no console e jogue uma nullpointerException. O processo de execução é executar primeiro o bloco de tentativa, executar o bloco finalmente após uma exceção e, finalmente, lançar uma exceção na tentativa do chamador. Esse resultado de execução é muito normal, porque não há manipulador de exceção de captura, todos os métodos só podem lançar a exceção gerada para fora;
Quais são os benefícios dessa abordagem? Para o teste e ,finalmente, faz o que deve fazer e lança exceções que não pode lidar; Em outras palavras, essa estrutura realiza a separação de responsabilidades, realiza a dissociação do manuseio de exceções e a limpeza de exceções e permite que diferentes métodos se concentrem no que eles devem fazer. Então, quando usar o Try-Finalmente e quando usar o Try-Catch-Finalmente? Obviamente, depende se o próprio método pode lidar com exceções que aparecem na tentativa. Se você pode lidar com isso sozinho, pegue -o diretamente sem jogá -lo no chamador do método; . Ou seja, declare uma exceção que os arremessos podem aparecer na assinatura do método e não podem ser tratados por si só, mas faça o que você deve fazer dentro do método.
A situação em que a declaração finalmente não será executada
A única situação em que a declaração finalmente de Java não será executada é que o método System.Exit () usado para encerrar o programa é executado primeiro.
classe pública teste {public static void main (string [] args) {try {System.out.println ("start"); } System.out.println ("end");O resultado da saída é:
Começar
Obviamente, se a energia for repentinamente cortada ao executar uma instrução Geral Try sem a instrução SYSTEM.EXIT (), todos os processos serão encerrados e a instrução finalmente não será executada.