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

关于报错机制和return的问题
try {
con = openCon();
ps = con.prepareStatement(sql);
setValues(ps, param);
rs = ps.executeQuery();
return ResultSupport.toResult(rs);
} finally {
closeAll(rs, ps, con);
}
这段代码是怎么执行的?
public boolean Login(Master m) {
boolean bool = false;
// 预编译的SQL语句
String sql = "select * from dbo.master where name=? and password=?";
try {
return BaseDao.execute(sql, m.getName(), m.getPassword());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这样为什么就报错了呢?

------解决方案--------------------
你的第一段代码return放在try里面,它的执行顺序是return ResultSupport.toResult(rs);
这时并不是直接返回程序调用,只是准备好了返回值,然后转去执行finally;执行完finally之后再取出刚刚准备好的返回值,执行返回操作。
你的第二段代码因为方法定义的是布尔型的,你就必须给方法一个布尔型的返回值。
你加了catch用来捕获异常,这时需要对try中的代码执行时出现异常的情况给出一个返回值。
java code:
public class Test {

public static void main(String[] args) {
Test test=new Test();
System.out.println("return:"+test.Login());

}

public boolean Login() {
boolean bool = false;

// try {
// return bool;
//
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// return bool;
// }

try {
return bool;
} finally {
bool=true;
System.out.println("finally:"+bool);
}

}
}