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!!
classNovaExceptionextendsRuntimeException{voidsegundaex(){try{System.err.println("Excessao lancada da classe Text!!");thrownewSecurityException();}catch(RuntimeExceptione){System.err.println("Excessao capturada de NovaException!!");thrownewClassCastException();}}}publicclassText{voidprimeiraex(){try{thrownewNovaException();}catch(Exceptione){((NovaException)e).segundaex();}catch(Throwablee){System.err.println("quero te pegar !!!!");}}publicstaticvoidmain(String...a)throwsException{newText().primeiraex();}}
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:
publicclassText{voidprimeiraex(){try{thrownewNovaException();}catch(Exceptione){try{//O try interno passou, mas o externo vai pegar essa exceção.((NovaException)e).segundaex();}catch(Throwablee){System.err.println("quero te pegar !!!!");}}}publicstaticvoidmain(String...a)throwsException{newText().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
fabioEM
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:
publicclassText{voidprimeiraex(){try{thrownewNovaException();}catch(Exceptione){try{//O try interno passou, mas o externo vai pegar essa exceção.((NovaException)e).segundaex();}catch(Throwablee){System.err.println("quero te pegar !!!!");}}}publicstaticvoidmain(String...a)throwsException{newText().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:
publicclassText{voidprimeiraex(){try{thrownewNovaException();}catch(Exceptione){((NovaException)e).segundaex();}}publicstaticvoidmain(String...a)throwsException{try{newText().primeiraex();catch(Throwablee){//Podemos pegar a exceção aqui fora!System.err.println("quero te pegar !!!!");}}}