Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

O catch não era obrigatório?

Boa tarde tudo bem? Eu acabei de assistir a aula 6 capítulo 3 - Try with resources e fiquei com uma dúvida. O professor tinha acabado de falar que todo try precisa de pelo menos um catch, mas logo no exemplo seguinte ele conseguiu rodar um bloco try sem um bloco catch. Como isso? Seria porque nesse caso estaria usando a interface AutoCloseable ? Agradeço desde já.

2 respostas
solução!

Fala João! Tudo bem?

É quase isso, o try precisa de um catch ou um finally, não necessariamente um catch sempre.

Repare que a sintaxe que ele utilizou no momento em que rodou o código sem o catch é diferente do try que ele estava utilizando antes. Do ponto de vista de sintaxe um try-with-resources (o que ele rodou) não é a mesma coisa que um try e por isso é possível executá-lo.

Na prática, com essa sintaxe e com a classe dele assinando a interface AutoCloseable é como se o finally estivesse implícito no try, ou seja, ele está lá e vai executar o método close(). Não é bem isso que acontece, mas é um jeito fácil de entender o que está acontecendo. Imagine que no exemplo dele, como a conexão já se Auto Fecha não faria sentido ter um finally fechando a conexão.

Mas, mesmo com o try-with-resources você ainda pode colocar seu bloco finally se assim desejar.

Entendi, muito obrigado Renan :-)