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());
}