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.