请高手看如下代码,关键是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();
}
}
Database db=null;
try{
db=DatabaseFactory.getDatabase();//获得数据库连接
return this.deleteRecord(db);
}catch(Exception e){
db.rollback();
e.printStackTrace();
}finally{
if(db!=null) db.close();
}
}
因此,db会close
如果return前一条出错,则直接转到catch,你这句return永远不会执行到了。应该在最后一个}前加上一句return此时如果不出异常,则不会做finally就返回;
如果出了异常,则做finally再返回
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);
}
}
语句...
return ;
}catch(Exception e){
发生错误,则执行这里的语句....
return ;// --> 楼主漏这句.
}finally{
不管发不发生都会在return前执行这里的语句...
}
return; //其实不用在try或catch内加return, 在这个地方加return就不会造成楼主的误解了