1
resposta

Checked e unChecked, quando usar e porque existem?

Não entendo porque o compilar faz isso de mudar a verificação conforme muda a instanciação. Isso seria, se eu instanciar de Exception minha exceção é alta prioridade e deve ser obrigatoriamente tratada? e caso for de runtimeexception, não é obrigatório, mas pode haver um erro? Como o compilar/java enxerga isso? olhando as classes, não vi nada indicando "hey se tu virar minha filha, vai ser obrigado a dizer throws a todos que tiverem essa exceção", ou o contrário com unChecked.

1 resposta

Olá Jade, tudo bem?

Entendo a sua dúvida sobre a diferença entre exceções checked e unchecked em Java. As exceções checked são aquelas que o compilador obriga o desenvolvedor a tratar, ou seja, é necessário colocar um bloco try-catch ou lançar a exceção para que o código compile. Já as exceções unchecked não precisam ser tratadas obrigatoriamente, mas podem ocorrer durante a execução do programa.

As exceções checked são usadas em situações em que o desenvolvedor pode prever que uma exceção pode ocorrer e quer garantir que ela seja tratada. Por exemplo, se você está lendo um arquivo em um programa, é possível que ocorra uma exceção de IO (entrada e saída) caso o arquivo não exista. Nesse caso, é importante tratar a exceção para que o programa não pare de funcionar.

Já as exceções unchecked são usadas em situações em que o desenvolvedor não pode prever que uma exceção pode ocorrer. Por exemplo, se você tentar dividir um número por zero, ocorrerá uma exceção de ArithmeticException. Essa exceção é unchecked porque o desenvolvedor não pode prever que o usuário vai digitar zero como divisor.

Pelo menos assim o Java "nasceu" mas hoje em dia praticamente só usa apenas exceções do tipo unchecked!

Quanto à sua pergunta sobre a instanciação de exceções, a diferença entre Exception e RuntimeException é que a primeira é checked e a segunda é unchecked. Isso significa que, se você instanciar uma exceção do tipo Exception, é necessário tratar a exceção obrigatoriamente. Já se você instanciar uma exceção do tipo RuntimeException, não é necessário tratar a exceção obrigatoriamente, mas é importante ter cuidado para que a exceção não interrompa o funcionamento do programa.

Espero ter ajudado e bons estudos!