Checked vs unchecked exceptions
Pergunta
Qual a diferença entre checked e unchecked exceptions em Java, e qual a crítica comum às checked exceptions?
Resposta esperada
Checked (herda de `Exception`, não de `RuntimeException`): o compilador obriga a tratar ou declarar com `throws` — pensadas pra condições recuperáveis e esperadas (arquivo não encontrado, I/O). Unchecked (herda de `RuntimeException`): não exigem declaração — pra erros de programação (null, índice inválido, estado ilegal). Crítica: checked exceptions poluem assinaturas ao longo de toda a cadeia de chamada, incentivam `catch` vazio pra 'calar o compilador', e não compõem bem com lambdas/streams. Por isso muito código moderno (e frameworks como Spring) prefere embrulhar em unchecked. A escolha certa é: recuperável e o chamador realmente pode agir → checked pode valer; senão → unchecked.
Por que perguntam isso
Pergunta pleno de Java. Sinal de experiência: citar o `catch` vazio e o atrito com streams/lambdas como motivo prático da preferência por unchecked.