Use uma exceção checked só quando quem chama pode realisticamente se recuperar e você quer que o compilador force uma decisão; use unchecked para erros de programação e para falhas que ninguém acima na pilha consegue resolver. Na prática, a maior parte do Java moderno pende para unchecked, embrulhando falhas de baixo nível numa exceção de domínio que carrega contexto, tratada uma vez em uma fronteira, como um exception handler que a mapeia para uma resposta.
Por que os entrevistadores perguntam isso
O entrevistador está sondando julgamento e hábitos que arruínam bases de código: capturar Exception e logar, engolir uma exceção num bloco vazio, ou embrulhar tudo em RuntimeException sem contexto. Também querem ouvir sobre uma única camada de tradução, porque espalhar try catch pela lógica de negócio é o que torna as falhas irrastreáveis. Lambdas e streams tornam exceções checked genuinamente desconfortáveis, e vale citar isso.
Como estruturar sua resposta
- Dê o teste de recuperabilidade para escolher entre as duas.
- Explique o embrulho com contexto em vez de relançar causas cruas.
- Descreva o tratamento em uma camada de fronteira, não em todo lugar.
- Liste os antipadrões que você se recusa a aceitar em review.
Exemplo de resposta
Meu teste é se quem chama pode fazer algo útil com aquilo. Um pagamento recusado pelo provedor é um desfecho de negócio legítimo, então isso é ou uma exceção checked ou, mais comumente, um tipo de resultado. Um argumento nulo ou uma conexão de banco que falhou não é algo que o código chamador consegue consertar, então é unchecked. Em serviços eu uso principalmente exceções de domínio unchecked, embrulhando a causa original para que o stack trace sobreviva e adicionando os identificadores que eu vou querer no log, como o id do pedido, já que uma SQL exception pelada três camadas abaixo não me diz nada. O tratamento acontece uma vez, numa fronteira: no Spring isso é um exception handler que mapeia cada exceção de domínio para um status code e um corpo de resposta, então os controllers ficam limpos. O que eu contesto em review é capturar Exception de forma ampla, capturar e logar e seguir como se nada tivesse acontecido, e blocos catch vazios. Eu também uso try with resources em todo lugar em vez de blocos finally, porque exceções suprimidas e falhas no close são tratadas corretamente de graça.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você lida com uma exceção checked dentro de uma lambda de stream?
- Quando você retornaria um tipo de resultado em vez de lançar?
- Que contexto você anexa a uma exceção para que ela seja útil num log?
Mais perguntas para Desenvolvedor Java
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas