Qual é a diferença entre
try {
fooBar();
} finally {
barFoo();
}
e
try {
fooBar();
} catch(Throwable throwable) {
barFoo(throwable); // Does something with throwable, logs it, or handles it.
}
Eu gosto mais da segunda versão porque ela me dá acesso ao Throwable. Existe alguma diferença lógica ou uma convenção preferencial entre as duas variações?
Além disso, há uma maneira de acessar a exceção da cláusula finally?
java
try-catch
try-finally
Vijay Kotari
fonte
fonte
Throwable
dofinally
bloco, porque pode não haver umThrowable
.Não são variações, são coisas fundamentalmente diferentes.
finally
é executado sempre ,catch
apenas quando ocorre uma exceção.fonte
Finalmente, os blocos de captura são bastante diferentes:
assim
é diferente de
significativamente.
Se você definir um bloco de teste, você deve definir
Portanto, o código a seguir também seria válido:
fonte
try
é usado para executar um método que pode lançar uma exceçãocatch
é usado para "capturar" parar essa exceçãofinally
é usado para qualquer limpeza necessária dessa exceção sendo capturada ou nãofonte
Não importa o que o bloco finally seja sempre executado, então, em geral, o bloco finally é usado, quando você tem sessões, conexões de banco de dados ou arquivos ou sockets estão abertos, então o código para fechar essas conexões será colocado. Isso é apenas para garantir que em um aplicativo não haja vazamentos de memória ou qualquer outro problema não deve ocorrer.
fonte
Finalmente, os blocos de captura são bastante diferentes:
Dentro do bloco catch, você pode responder à exceção lançada. Este bloco é executado apenas se houver uma exceção não tratada e o tipo corresponder a um ou for uma subclasse daquele especificado no parâmetro do bloco catch. Finalmente, será sempre executado após os blocos try e catch, haja uma exceção levantada ou não.
fonte
Em Minha pesquisa Finalmente o bloco é sempre executado e é principalmente "usado para que todas as conexões abertas sejam fechadas" e para destruir algo que está rodando desnecessariamente.
fonte
Geralmente, quando usamos quaisquer recursos como streams, conexões etc., temos que fechá-los explicitamente usando finally block. No programa abaixo, estamos lendo dados de um arquivo usando FileReader e fechando-o usando finally block.
Talvez outros caras como eu tenham procurado algo assim.
Informações desta página tutpoint
fonte
Finalmente o bloco é sempre executado. O bloco Catch é executado apenas quando uma exceção que corresponde ao parâmetro dos blocos é capturada.
fonte
Mesmo na primeira forma, você pode registrá-lo no método de chamada. Portanto, não há grande vantagem, a menos que você queira fazer algum tratamento especial ali mesmo.
fonte
O bloco Try conterá as instruções que irão gerar a exceção. O bloco catch manterá a referência lançada do bloco try e as mensagens necessárias são geradas a partir do bloco catch. Finalmente, o bloco também é usado para fechar os recursos usados como fechamento de io, fechamento de arquivo, fechamento de dB. No Java -9, o recurso try-with aprimorado surgiu onde os recursos são declarados fora do try..in enchanced try with resource o bloco catch é mandatório
fonte