Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

certificacao-java-excecoes section 4 exercise 11

Bom dia, sei q pode parecer meio bobo, mas fiquei com uma duvida. O metodo m2() e m() podem lançar um FILENOTFOUNDEXCEPTION que herda de IOException, e como que eu lanço uma exception da minha classe que herda de RuntimeException? isso deveria funcionar? pq visualmente nao deveria.

4 respostas

Oi Jose, não sei se entendi direito a pergunta, mas lá vai a resposta.

Basta que você crie uma classe que herda de RuntimeException e lance normalmente com o uso da palavra throw. Ex:

if(algumaCondicao) {
   throw new MinhaExceptionDeRuntime();
}

O seu método não vai precisar declarar o throws justamente pq essa exception é de tempo de execução.

Na verdade no exercicio, ele tem a seguinte classe e o metodo.

class MyException extends RuntimeException {

} class A { void m2() throws java.io.FileNotFoundException { System.out.println("e"); boolean sim = true; if(sim) throw new MyException(); System.out.println("f"); }

Minha duvida e a seguinte, como que ele compila, sendo que o meu "throws" eh para uma exception que herda de IOException, e o que eu lanço "throw" herda de RunTimeException, essas duas classes de exception sao imcompativeis, nao se comunicao de acordo com a arvore de exceptions.

solução!

Legal Jose, agora entendi.

Você não precisa declarar no throws as exceptions que herdam de RuntimeException. Independente do que está lá, você sempre pode lançar alguma exception de tempo de execução. O que vc não consegue fazer é lançar, por exemplo, alguma outra checada, como uma SQLException.

Legal, agora entendi. Obrigado