Estou revendo um novo código. O programa tem apenas uma tentativa e, finalmente, um bloco. Como o bloco catch é excluído, como o bloco try funciona se encontrar uma exceção ou algo que possa ser jogado? Apenas vai diretamente para o bloco final?
java
try-catch
finally
try-catch-finally
try-finally
NullPointer0x00
fonte
fonte
Respostas:
Se algum código no bloco try puder gerar uma exceção verificada, ele deverá aparecer na cláusula throws da assinatura do método. Se uma exceção não verificada for lançada, ela será excluída do método.
O bloco final é sempre executado, independentemente de uma exceção ser lançada ou não.
fonte
Uma pequena nota em
try
/finally
: O finalmente sempre será executado, a menos queSystem.exit()
é chamado.try{}
bloco nunca termina (por exemplo, loop sem fim).fonte
try{..} catch{ throw ..} finally{..}
? Eu acho que finalmente não será executadoA especificação da linguagem Java (1) descreve como
try-catch-finally
é executada. Não ter captura é equivalente a não ter uma captura capaz de pegar o Throwable fornecido.(1) Execução do try-catch-finalmente
fonte
O interior finalmente é executado antes de lançar a exceção no bloco externo.
Resulta em
fonte
O bloco final é sempre executado após o término do bloco try, se a tentativa termina normalmente ou de forma anormal devido a uma exceção, er, lançável.
Se uma exceção é lançada por qualquer código dentro do bloco try, o método atual simplesmente lança novamente (ou continua a lançar) a mesma exceção (depois de executar o bloco finally).
Se o bloco final lança uma exceção / erro / lança, e já existe um lançamento pendente, fica feio. Francamente, esqueço exatamente o que acontece (tanto pela minha certificação anos atrás). Acho que os dois lançadores ficam interligados, mas há um vodu especial que você precisa fazer (ou seja, - uma chamada de método que eu precisaria procurar) para obter o problema original antes que o "finalmente" vomite, er, vomite.
Aliás, try / finalmente é uma coisa bastante comum a ser feita no gerenciamento de recursos, pois o java não possui destruidores.
Por exemplo -
"Finalmente", mais uma dica: se você não se preocupam em colocar em um prendedor, ou captura específica (esperado) subclasses throwable, ou apenas pegar "Throwable", não "Exception", para um catch-all interceptação de erro geral. Muitos problemas, como as reflexões, geram "Erros", em vez de "Exceções", e esses erros serão corrigidos por qualquer "pegar tudo" codificado como:
faça isso:
fonte
As versões Java anteriores à versão 7 permitem essas três combinações de try-catch-finalmente ...
finally
O bloco será sempre executado independentemente do que estiver acontecendo notry
catch
bloco ou / e . portanto, se não houvercatch
bloqueio, a exceção não será tratada aqui.No entanto, você ainda precisará de um manipulador de exceções em algum lugar do seu código - a menos que queira que seu aplicativo trave completamente, é claro. Depende da arquitetura do seu aplicativo exatamente onde está o manipulador.
fonte
A exceção é lançada para fora do bloco, como em qualquer outro caso em que não é capturada.
O bloco final é executado independentemente de como o bloco try foi encerrado - independentemente de haver alguma captura, independentemente de haver uma captura correspondente.
Os blocos catch e finalmente são partes ortogonais do bloco try. Você pode ter um ou ambos. Com o Java 7, você não poderá ter nenhum!
fonte
Você não tenta com esse programa? Irá finalmente bloquear e executar o bloco finalmente, mas a exceção não será tratada. Mas, essa exceção pode ser anulada no bloco finalmente!
fonte
O bloco finalmente é executado após a conclusão do bloco try. Se algo é lançado dentro do bloco try quando ele sai, o bloco final é executado.
fonte
Dentro do
try
bloco, escrevemos códigos que podem gerar uma exceção. Ocatch
bloco é onde lidamos com a exceção. Ofinally
bloco é sempre executado, independentemente de ocorrer ou não uma exceção.Agora, se tivermos o bloco try-finalmente em vez do bloco try-catch-finalmente, a exceção não será tratada e, após o bloco try, em vez de o controle pegar o bloco, ele irá finalmente bloquear. Podemos usar o bloco try-finally quando queremos fazer nada com a exceção.
fonte
Independentemente da exceção lançada ou não no
try
bloco, ofinally
bloco será executado. A exceção não seria detectada.fonte