黑马程序员技术交流社区
标题:
return和finally的疑惑
[打印本页]
作者:
杨立
时间:
2012-12-8 09:19
标题:
return和finally的疑惑
本帖最后由 杨立 于 2012-12-9 21:34 编辑
return是在finally执行后才返回的,且在finally无法改变返回值。
public static StringBuffer test() {
StringBuffer sb = new StringBuffer("wer");
try {
sb.append("_hi");
return sb;
} catch (Exception e) {
} finally {
System.out.println("finally");
sb.append("_!!!!!!");
}
return sb;
}
finally里的sb.append("_!!!!!!");,为什么还是执行了?
作者:
qiucheng1990
时间:
2012-12-8 09:51
如果没有最后的return sb; 代码编写时会报错。所以说try块中的return是不起任何作用的。
逻辑上讲 ,try块中的语句是为了检查异常。如果在return前就发生了异常,那么这个方法就没有返回值了。编译不会通过。所以try中的return没有意义。
如果忽略了第一个return,这个程序是能看的通的。
作者:
孙万利
时间:
2012-12-8 09:55
public static StringBuffer test() {
StringBuffer sb = new StringBuffer("wer");
try {
sb.append("_hi");
return sb;
} catch (Exception e) {
} finally {
System.out.println("finally");
sb.append("_!!!!!!");
}
return sb;
}
finally里的sb.append("_!!!!!!");,为什么还是执行了?
这个就是异常体系里的一个格式,try()块里是可能发生异常的语句,catch()块是如果发生异常则被chtch语句捕获,catch()处理异常,执行catch代码块里的语句;而fianlly就是最终一定会被执行的代码,所以,finally代码块里的语句,肯定会被执行一遍的;
这就是规定吧
作者:
吴健
时间:
2012-12-8 20:09
本帖最后由 吴健 于 2012-12-8 20:13 编辑
java异常处理机制不论有无异常出现finally中的代码块总会执行,即如果程序中出现异常会执行catch后的代码块,然后执行finally中的代码,如果程序中无异常产生,则直接执行
finally中的代码。
(1)不管有无异常产生,finally都会执行
(2)当try、catch语句中有return时,finally仍会执行。
(3)如果finally语句中含有return时,try,catch中的返回值将获取不到
public static String test(){
String str = null;
List list = new ArrayList();
try{
list.get(9);
return "try";
}catch(Exception e){
return "catch";
}finally{
return "finally"; //该方法最终返回的是finally中的字符串
}
}
当然finally一般用来释放占用的资源,不宜包含return语句,会使程序提前退出
(4)如果出现异常的话则会提前退出执行finally语句后在执行catch中的return,然后退出程序
public static String test(){
String str = null;
List list = new ArrayList();
try{
list.get(9);
return "try";
}catch(Exception e){
return "catch"; //退出程序
}finally{
}
}
作者:
7℃洋
时间:
2012-12-8 23:58
你这只会执行第一个return sb;
但是执行之前肯定会先把finally里边的语句执行了才会结束
但是执行时候不改变sb的值
finally一般用来释放资源用的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2