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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.