Baita tricky question hein?!
Fiz uns testes aqui e acredito que o objeto da exceção “se perde” e fica disponível para o Garbage Collector (o mesmo que ocorre quando um método com retorno é invocado e o retorno não é atribuído a nenhuma variável).
Tente executar um teste mais completo, assim:
publicclassDoubleThrows{publicstaticvoidmain(String[]args){try{test();}catch(Exceptione){System.out.println(e);}}privatestaticvoidtest()throwsException{try{System.out.println("Passou no try");thrownewMyException("Excecao 1");}finally{System.out.println("Passou no finally");System.gc();thrownewMyException("Excecao 2");}}}classMyExceptionextendsException{Stringtext;MyException(Stringtext){super(text);this.text=text;System.out.println("Instanciou "+text);}@Overrideprotectedvoidfinalize()throwsThrowable{System.out.println("Passou no finalize de "+text);super.finalize();}@OverridepublicStringtoString(){return"Lançou exceção "+text;}}
Realmente, o finally é desncessário nesse caso.
Aliás, acho que não é interessante lançar exceções dentro do finally. Acho que fazer isso pode gerar mais problemas do que soluções.
Mas acho que a pergunta do nosso colega é: e se for lançada exceção no finally, o que acontece?
tralsl
eu tenho a mesma dúvida
pelo teste que fiz, a exceção do finally e lançada e a do bloco try é esquecida e terá que tomar cuidado com o GB, como falou o colega acima
esse foi o código de teste
publicclassExEx{publicstaticvoidmain(String[]args){System.out.println("inicio");try{opa();}catch(Exceptionex){System.out.println("catch main ex retornou: "+ex.getMessage());}}privatestaticvoidopa()throwsException{try{if(true){System.out.println("dentro try");thrownewException("opa try");}}/*catch (Exception s) { System.out.println("dentro catch"); }*/finally{thrownewException("finally");}}}