public boolean isExists(String sql){
rs=this.executeQuery(sql);
try{
if(rs.next()) return true;
else return false;
}catch(Exception e){
//捕获到了异常
}finally{
//...
}
                System.out.println('catch异常了,这里为什么还会执行?')
return true;
}
是不是可以理解为finally后的代码不保证一定能执行?
有时执行有时不执行?这样的话是否应该在catch里返回, 而不是在finally后返回?请大家指点一二.

解决方案 »

  1.   

    finally{
                //...your code
                //无论是否异常 这里肯定执行
    }
      

  2.   

    异常出现有两种解决把法,一种是只抛出,不捕获。声明的时候throws Exception.这时候由虚拟机抛出异常并打印堆栈跟踪,然后程序被终止执行。第二种,就是try  catch块把异常捕获回来,这个时候出现异常,程序会跳过try块中剩下的代码,转而执行catch块中的语句,如果catch中没有throw 别的异常的话,程序将执行catch块之后的所有语句。上面的程序及时没有finally{}也会执行  System.out.println('catch异常了,这里为什么还会执行?')。既然catch叫捕获异常,那么当然可以把本来要交给虚拟机解决的问题,拿回来到程序中自己解决了。
      

  3.   

    finally的定义就是
    在捕获异常后
    强制执行后面的语句块比如连接了一个巨大的数据库
    就算出了异常
    资源还是一定要释放的
      

  4.   

    你还不明白finally的真正用处,
    finally{
       这里的东西无论什么情况下都会被执行。
    }
      

  5.   

    try{
      }cath(Exception ex){
     
    }finally{
    //要执行的代码,一定会被执行}
    //代码看前面是否执出异常,如果在finally中执出异常,则不执行,否则执行