请高手看如下代码,关键是return语句在try里边,请问db会不会close?就是说finally语句块到底是在什么时候执行,如果finally语句块在return前边执行的话,那么db就被关掉了,deleteRecord(db)方法就无法执行,而事实上此方法被执行了,但是finally语句块又肯定不会在return语句后边执行。请高手指点。public boolean deleteItem(){
  Database db=null;
  try{
    db=DatabaseFactory.getDatabase();//获得数据库连接
    return this.deleteRecord(db);
  }catch(Exception e){
    db.rollback();
    e.printStackTrace();
  }finally{
    if(db!=null) db.close();
  }
}

解决方案 »

  1.   

    finally语句肯定会执行,在return之前执行。
    因此,db会close
      

  2.   

    到最后要返回值的时候,先运行finally,再把值返回
      

  3.   

    你这语句不会编译通过的,因为你return在try里面。
    如果return前一条出错,则直接转到catch,你这句return永远不会执行到了。应该在最后一个}前加上一句return此时如果不出异常,则不会做finally就返回;
    如果出了异常,则做finally再返回
      

  4.   

    楼上的,finally语句块在return之前执行,那么,return语句块中的db应该已被关掉,事实上仍然能从数据库取到数据。我怀疑这样的写法db是没有关掉的。
      

  5.   

    简单用这个程序测试就行了,轮换使用被//的2条语句class test{
    public static int aa(){
    int a=1;
    try{
    a=2;
    //throw new Exception("exception");
    //return a;
    }catch(Exception e){
    }finally{
    a=3;
    }
    return a;
    }
    public static void main(String[] v){
    test z=new test();
    int m=test.aa();
    System.out.print(m);
    }
    }
      

  6.   

    是否先执行deleteRecord(db);然后再执行finally语句块,然后再return?
      

  7.   

    try{
        语句...
        return ;
    }catch(Exception e){
        发生错误,则执行这里的语句....
        return ;//  --> 楼主漏这句.
    }finally{
        不管发不发生都会在return前执行这里的语句...
    }
    return; //其实不用在try或catch内加return, 在这个地方加return就不会造成楼主的误解了