日期:2014-05-20  浏览次数:20866 次

throw和finally同时用的问题
public void test() throws Exception{
  try{
  ...
  }catch(Exception e){
  throw e;
  }finally{
  ...
  }
}

如下形式调用test()方法:
try{
  test();
}catch(Exception e){
  System.out.println(e.getMessage());
}
输出结果为空,如果将test方法中的finally块去掉就能输出错误信息,这是怎么回事啊?

------解决方案--------------------
finally总会执行,throw语句将结束方法的执行,但是指向完了throw语句之后,控制权就转到finally了,throw语句就起不到抛出异常结束方法的作用了
------解决方案--------------------
try{ 
test(); 
}catch(Exception e){ 
System.out.println(e.getMessage()); 

这里执行到test()时执行下面的test函数
public void test() throws Exception{ 
try{ 
... 
}catch(Exception e){ 
throw e; 
}finally{ 
... 


而这个test函数在执行完finally里后程序就结束了,它不会返回到下面程序中的catch再执行,所以不会有输出,当你去掉了finally后它就会再执行完上面函数的方法后继续执行下面程序中的catch语句,就会返回e.getMseesage()的值了
try{ 
test(); 
}catch(Exception e){ 
System.out.println(e.getMessage());