Exception

3 respostas
D

Pessoal, estou com a seguinte dúvida a respeito de exceções 8O

No simulado do Dan, me deparei com uma questão assim:

class RedException extends Exception{}

        public class ClasseDeExcecoes{
              static void methodX( ) {}

               public static void main( String[] args ) {
                          try{
                                methodX( );
                          } catch( RedException exc ){
                              System.out.println( "Red Exception" );
                          }
               }                              
       }

O trecho de código acima resulta em erro de compilação, pois o método "methodX" não declara que lança tal exceção.

Porém, ao compilar outro código, sendo que este captura uma Exception, o código compilou sem erros.

public class ClasseDeExcecoes{
              static void methodX( ) {}

               public static void main( String[] args ) {
                          try{
                                methodX( );
                          } catch( Exception exc ){
                              System.out.println( "Exception" );
                          }
               }                              
       }

Gostaria de saber por que isto acontece, sendo que ambas as exceções
( Exception e RedException ) são exceções conferidas, além de uma ser herdeira da outra.

[]'s :grin:

3 Respostas

C

Olá Docinho,

A minha resposta não é lá muito teórica não, mas eu acho que é assim: em qualquer trecho de código Java, é possível se lançar uma exceção, como NullPointer, NoClassDefFound… por isso, sempre um try {} catch (Exception e) funciona. Mas para a sua RedException, você só pode colocar um catch se algum método dentro do try correspondente disser que pode lançar essa exceção. Como o methodX não lança, não pode. Mas Exception, sempre pode (alguém me corrija se eu estiver errado).

Até mais,

BrunoBastosPJ

Só acrescentando oq o CD1 falou… Existe uma classe chamada RunTimeException se não me engano esse classe extende Exception e método que lançam essa exceção não precisam ser tratados com um try catch. As classes que extendem RunTimeException como NullPointException, ArrayIndex… não são tratados mas extendem Exception. Por isso você pode fazer isso…

Eu li alguma coisa assim no USE A CABEÇA JAVA se ei falei alguma besteira por favor me manda uma MP corrigindo pq eu vou fazer a SCJP mes que vem hahaha

D

Bom, pelo que eu entedi, você criou uma classe que estende Exception tornando-a uma classe de exceção. Sendo assim, esse nova exceção é verificada e tem que ser declarada no método methodX()

static void methodX() throws RedException {

. . .

}

Bom, acho que é isso…

Se eu estiver errado, por favor, informe-me.

donatinho

Criado 4 de setembro de 2006
Ultima resposta 6 de set. de 2006
Respostas 3
Participantes 4