dúvida sobre exceção em java

5 respostas
F

Boa noite a todos, acho que no Tópico abaixo me expremir muito mal ,sem contar os erros de português devido a pressa!! e acabei ser deixar claro a minha dúvida ,desculpem-me!!
Alguém sabe pq este código abaixo nao captura a axceção lançada na linha 8?
Agradeço desde já e obrigado de pela atenção!!

class NovaException extends RuntimeException{   
    void  segundaex(){   
        try{     
            System.err.println("Excessao lancada da classe Text!!");   
            throw new SecurityException();   
        }catch(RuntimeException e){   
             System.err.println("Excessao capturada de NovaException!!");   
             throw new ClassCastException();   
        }   
    }   
}   
  
public class Text{   
    void primeiraex(){   
         try{   
           throw new NovaException();   
         }catch(Exception e){   
            ((NovaException)e).segundaex();   
         }catch(Throwable e){   
              System.err.println("quero te pegar !!!!");   
         }   
  
    }   
  public static void main(String...a) throws Exception{   
     new Text().primeiraex();   
   }   
}

5 Respostas

ViniGodoy

Simplesmente pq não existe um try…catch envolva da chamada ao método segundaEx().

Quando vc está no catch, o trecho que está dentro do try já passou. Tente assim:

public class Text{   
    void primeiraex(){   
        try{   
           throw new NovaException();   
        }catch(Exception e){   
            try {         
                //O try interno passou, mas o externo vai pegar essa exceção.
                ((NovaException)e).segundaex();               
             }catch(Throwable e){   
                  System.err.println("quero te pegar !!!!");   
             }   
        }
    }   
  public static void main(String...a) throws Exception{   
     new Text().primeiraex();   
   }   
}

Ou ainda assim:

public class Text{ void primeiraex(){ try { try{ throw new NovaException(); }catch(Exception e){ ((NovaException)e).segundaex(); } }catch(Throwable e){ System.err.println("quero te pegar !!!!"); } } public static void main(String...a) throws Exception{ new Text().primeiraex(); } }

F

ViniGodoy:
Simplesmente pq não existe um try…catch envolva da chamada ao método segundaEx().

Quando vc está no catch, o trecho que está dentro do try já passou. Tente assim:

public class Text{   
    void primeiraex(){   
        try{   
           throw new NovaException();   
        }catch(Exception e){   
            try {         
                //O try interno passou, mas o externo vai pegar essa exceção.
                ((NovaException)e).segundaex();               
             }catch(Throwable e){   
                  System.err.println("quero te pegar !!!!");   
             }   
        }
    }   
  public static void main(String...a) throws Exception{   
     new Text().primeiraex();   
   }   
}

Ou ainda assim:

public class Text{ void primeiraex(){ try { try{ throw new NovaException(); }catch(Exception e){ ((NovaException)e).segundaex(); } }catch(Throwable e){ System.err.println("quero te pegar !!!!"); } } public static void main(String...a) throws Exception{ new Text().primeiraex(); } }

Boa !!é verdade!,cara eu nem sabia que podia aninhar try assim valeu mesmo!!!sera que cai coisa assim no exame!!??

GiancarloBraga

No exame de certificação da Sun?
Sim.
E coisas muito mais complicadas também, essa não é nem a ponta do iceberg, é apenas um micróbio na ponta do iceberg, hehehehe.

Abraço,
Giancarlo Braga.

LPJava

no meu exame so caiu duas questao que envolvia Exceções uma de drop… para colocar o tipo correto no catch{} e a outra que caiu foi envolvendo a questao de subscrição de metodo de qual exceção vc pode colocar na subclasse de acordo com o tipo da exceção na superclass. Por padrao qualquer metodo lança RuntimeException entao na subclass qualquer subtipo de exception vc pode colocar… agora vc tem que saber quais era do subtipo RuntimeExceptio e as do tipo Exception - verificadas.

ViniGodoy

Agora que eu me liguei, faltou ainda outra opção:

public class Text{     
    void primeiraex(){     
         try{     
           throw new NovaException();     
         }catch(Exception e){     
            ((NovaException)e).segundaex();     
         }     
    }     

  public static void main(String...a) throws Exception{     
      try {
         new Text().primeiraex();     
      catch(Throwable e){     //Podemos pegar a exceção aqui fora!
         System.err.println("quero te pegar !!!!");     
      }
   }     
}
Criado 18 de outubro de 2007
Ultima resposta 19 de out. de 2007
Respostas 5
Participantes 4