Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

try-with-resources não é um tratamento válido sem um catch?

Foi dito que o try precisa ter pelo menos um catch ou um finally e que o try-with-resources tem um finally "embutido". Porém, ao remover o catch do código a seguir, e também ao tentar colocar um finally no lugar, o meu método main foi interrompido e não mostrou a saída "fim do main". (Esse é o caso lançando a exceção no construtor da classe Conexao)

public class TestaConexao {

    public static void main(String[] args) {

        try(Conexao con = new Conexao()){
            con.leDados();
        } catch (IllegalStateException ex) {
            System.out.println("deu erro na execução");
        }

        System.out.println("fim do main");
    }

}

Sendo assim, sempre precisa ter um catch junto ao try-with-resources para ser considerado um tratamento?

1 resposta
solução!

Bom dia, é que quando a aplicação lançar uma exception o código subsequente será abortado a sua execução, ou seja, não ira executar. Então se você tem um trecho de código que deseja executar independentemente se ocorrer uma exceção na sua lógica, a sua lógica deve estar em um bloco try. Agora você pode utilizar o catch ou o finally, a diferença entre eles é que o catch vai entrar somente se a exceção lançada dentro do bloco try for daquele tipo ou herdar da mesma, então você pode fazer algo e relançar essa exception ou outra ou até mesmo ignorar essa exception. O finally ele sempre ira ser executado independentemente do que ocorrer no try ou no catch, mas acaso tenha ocorrido uma exception no try o finally ira executar os códigos no seu bloco e essa exception será lançada pela aplicação interrompendo o fluxo normalmente.

Então o tratamento de erros vai depender muito da sua lógica de negócios, se você não fizer um bloco try você terá de relançar a exception se ela for uma exceção checada, caso for não checada não precisa, e a mesma ira abortar toda a execução do seu programa chegando ao usuário o erro. Agora se você deseja fazer algo quando ocorrer um erro (exception) você precisara do bloco try com catch ou um finally dependendo do seu objetivo, você até mesmo poderia fazer um catch relançando uma exception própria da sua aplicação com uma mensagem de erro mais amigável. Mas o tratamento de erro diz respeito a você trata-lo e não ignora-lo.