Posso ter deixado passar algo despercebido, mas se a Classe RuntimeException extende diretamente a Exception, como é possível dar um throw new RuntimeException sem que aja erro de compilação?
Posso ter deixado passar algo despercebido, mas se a Classe RuntimeException extende diretamente a Exception, como é possível dar um throw new RuntimeException sem que aja erro de compilação?
Oi Érick, tudo bem?
Embora a classe RuntimeException
seja uma subclasse de Exception
, ela é diferente das outras classes que herdam de Exception
. Ela e todas as suas subclasses são unchecked
, portanto o compilador não te obriga a declarar sua existência através do throws AlgumaCoisaException
ou fazer uso do try-catch
.
Se observarmos a documentação das classes Exception e RuntimeException, não conseguimos ver uma distinção clara entre elas já que todos os métodos são iguais. Isso se dá porque para a JVM, não existe diferença entre uma Exception
e uma RuntimeException
, mas para o compilador, existe. Ou seja, o compilador faz essa checagem apenas nas subclasses de Exception
(checked), enquanto ignora as subclasses de RuntimeException
(unchecked), por isso dizemos que o código unchecked não é verificado em tempo de compilação.
Espero ter ajudado, qualquer dúvida é só avisar!
Bons estudos!!
Olá Érick, tudo bem?
Apesar da RuntimeException extender a super classe Exception, ela não é do tipo checked pois é a partir dela que podemos definir as exeções do tipo unchecked, portanto ela em si também tem que ser desse tipo.
Se a RuntimeException fosse do tipo checked não seria possível para suas filhas serem do tipo unchecked, pois essa "caracterísca" é passada adiante pela herança.