Primeiro de tudo, como qualquer outro paradigma de programação, você precisa fazer o certo para que funcione bem.
Para mim, a vantagem das exceções verificadas é que os autores da biblioteca de tempo de execução Java JÁ decidiram por mim que problemas comuns eu poderia razoavelmente esperar que fosse capaz de lidar no ponto de chamada (em oposição a um catch-print- de nível superior bloco de matriz) e considere o mais cedo possível como lidar com esses problemas.
Eu gosto de exceções verificadas porque elas tornam meu código mais robusto, forçando-me a pensar na recuperação de erros o mais cedo possível.
Para ser mais preciso, para mim isso torna meu código mais robusto, pois me obriga a considerar casos de canto estranhos muito cedo no processo, em vez de dizer "Opa, meu código não funciona se o arquivo ainda não existir" com base em um erro na produção, que você precisará refazer seu código para manipular. Adicionar manipulação de erro ao código existente pode ser uma tarefa não trivial - e, portanto, cara - quando se chega à manutenção, em vez de apenas fazer isso desde o início.
Pode ser que o arquivo ausente seja algo fatal e deva causar uma falha no programa, mas você toma essa decisão com
} catch (FileNotFoundException e) {
throw new RuntimeException("Important file not present", e);
}
Isso também mostra um efeito colateral muito importante. Se você quebrar uma exceção, poderá adicionar uma explicação que acompanha o rastreamento de pilha ! Isso é extremamente poderoso porque você pode adicionar informações sobre, por exemplo, o nome do arquivo que estava faltando, ou os parâmetros passados para esse método ou outras informações de diagnóstico, e essas informações estão presentes diretamente no rastreamento da pilha, que frequentemente é a única coisa que você começa quando um programa falha.
As pessoas podem dizer "podemos apenas executar isso no depurador para reproduzir", mas descobri que com muita freqüência os erros de produção não podem ser reproduzidos posteriormente, e não podemos executar depuradores na produção, exceto em casos muito desagradáveis em que essencialmente seu trabalho está em jogo.
Quanto mais informações em seu rastreamento de pilha, melhor. As exceções verificadas me ajudam a obter essas informações rapidamente.
EDIT: Isso vale para designers de bibliotecas também. Uma biblioteca que eu uso diariamente contém muitas exceções verificadas que poderiam ter sido projetadas muito melhor, tornando-a menos tediosa de usar.