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

Qual é o mais adequado ?

Aula 2 - Atividade 5

É ensinado essa forma de usar o catch:

catch(ArithmeticException | NullPointerException e)

Porém percebi que também poderia simplismente usar:

catch (Exception e)

Que captura qualquer erro e não somente erros aritiméticos e de nullPointer

Minha dúvida é sobre qual é mais correto de ser utilizada, pelo eu entendi, na primeira eu sei muito bem quais erros vão ser capturados no catch e talvez poderia tratá-los de forma específica , já na segunda eu posso capturar qualquer coisa

1 resposta
solução!

Opa,

Então, entendo que o legal é colocar sentido no código. Realmente, isso aqui:

catch (Exception e)

resolve porque é a superclasse de exceções mais específicas.

Mas supondo que você queira executar alguma coisa caso um determinado tipo de exceção aconteça, mas o código pode lançar outras exceções que você apenas gravará num log ou algo do tipo.

É possível fazer algo assim:


    try{  
         comando(s);
    } catch (FileNotFoundException f) {
         comando(s); 
    } catch (NullPointerException f) {
         comando(s); 
    } catch (Exception e) {
         log.error("texto da fora que quiser");
   }

Lembrando que isso só funciona quando feito da mais específica para a mais genérica.

Percebe que dá pra colocar lógica dentro do tratamento de exceção?

Falar sobre o mais correto é complicado. O que não pode é deixar de tratar exceções e jogar stacks de erros na cara do usuário ..

Uma coisa legal a se fazer é aplicar conceitos como análise de valor limite e fronteiras nos testes dos programas, pois forçam erros. Isso tende a mostrar exceções não tratadas e deixar a aplicação mais resiliente.