Os methods que lançam o RuntimeException indicam isso na assinatura do método?

Por exemplo, muitos methods em frameworks / JDK podem lançar

java.lang.SecurityException 

mas isso não é indicado na assinatura do método (já que essa é uma prática normalmente reservada para exceções verificadas). Eu quero argumentar que declarar RuntimeExceptions no método sigs tem muitos benefícios (semelhante à verificação de tipo estático, por exemplo). Estou bêbado ou não?

Eu não declararia uma exceção não verificada na assinatura, pois é enganosa para o usuário dessa API. Não é mais óbvio se a exceção deve ser explicitamente tratada.

Declará-lo no javadoc é uma abordagem melhor, pois permite que alguém o manipule se achar necessário, mas sabe que pode ignorá-lo, se quiser. Isso faz com que a separação entre marcada e desmarcada seja limpa.

No tutorial do Oracle Java :

“Se é tão bom documentar a API de um método, incluindo as exceções que ele pode lançar, por que não especificar exceções de tempo de execução também?” Exceções de tempo de execução representam problemas que são o resultado de um problema de programação e, como tal, o código do cliente da API não pode ser razoavelmente esperado para recuperar-se deles ou manipulá-los de qualquer maneira. Tais problemas incluem exceções aritméticas, como dividir por zero; exceções de ponteiro, como tentar acessar um object por meio de uma referência nula; e exceções de indexação, como tentar acessar um elemento de matriz por meio de um índice muito grande ou muito pequeno.

Exceções de tempo de execução podem ocorrer em qualquer lugar de um programa e, em um típico, podem ser muito numerosas. Ter de adicionar exceções de tempo de execução em cada declaração de método reduziria a clareza de um programa.

Dê uma olhada no javadoc da Coleção # add

Há toda uma série de exceções não verificadas mencionadas:

 Throws: UnsupportedOperationException - add is not supported by this collection. ClassCastException - class of the specified element prevents it from being added to this collection. NullPointerException - if the specified element is null and this collection does not support null elements. IllegalArgumentException - some aspect of this element prevents it from being added to this collection. 

Se você tiver paciência, recomendo que você documente completamente as possíveis exceções geradas por seus methods dessa maneira. De certa forma, é ainda mais importante fazer isso para exceções não verificadas, já que as exceções verificadas são um pouco auto-documentadas (o compilador força o código de chamada a reconhecê-las).

No meu ponto de vista, é melhor declarar exceções de tempo de execução pelo menos no javadoc para o método. Declará-lo na assinatura torna ainda mais óbvio o que pode acontecer quando algo dá errado. Esta é a minha principal razão para sugerir fornecer esta informação.

FYI: como o tempo tem progredido (agora em 2017), estou agora muito mais inclinado a documentá-los apenas no javadoc e evitar exceções verificadas, tanto quanto possível.

Na minha opinião, as exceções não verificadas nunca devem ser declaradas na assinatura do método, pois isso é contrário à sua natureza.

Se, no entanto, um método provavelmente lançar algumas exceções não verificadas, notando que as circunstâncias prováveis ​​em @throws no Javadoc podem ser úteis para outras pessoas invocando o método para entender o que pode dar errado. Isso é útil apenas para exceções que os chamadores provavelmente conseguirão manipular (como um NPE devido a uma input incorreta etc.)

Se você estiver escrevendo uma API para ser usada por outras pessoas, então há vários motivos para a documentação explícita de sua intenção na API e não há desvantagem em declarar RuntimeExceptions na assinatura do método.

Isso tem a ver com a discussão sobre exceções verificadas . A maioria concorda que exceções não devem ser declaradas em assinaturas de methods.

Há também uma discussão sobre como as exceções de tempo de execução devem ser usadas. Eu concordo com um cartaz que as exceções de tempo de execução devem denotar um erro de programação ou uma condição fatal. Portanto, não há muito mérito em declará-los na assinatura. Todo método poderia potencialmente através de um.