java一道题目,求大牛指导try的return和finally

枫之逆 2012-03-02 09:37:02
在try的括号里面有return一个值,那是否还执行finally里的代码。是在return前执行还是return后执行??
...全文
642 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijixuc6sdn 2012-03-05
  • 打赏
  • 举报
回复
public class T {
static boolean r = false;
public static boolean test() {
// boolean r = false;
try {
r = true;
return r; //注意,最后返回值是try里面的

} catch (Exception e) {
} finally {
r = false;
}
return r; // 此处不会执行
}

public static void main(String[] args) {
System.out.println(test());
}
}
sue2650 2012-03-05
  • 打赏
  • 举报
回复
还是8楼和22楼的代码最清晰明白···
candiceChan7 2012-03-05
  • 打赏
  • 举报
回复
finally先执行、、

任何时候执行return之后该方法其他都不会执行了、
hanfenyue 2012-03-05
  • 打赏
  • 举报
回复
try中的finally是一定执行的
elva1176 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 huangck6633511 的回复:]
public class Test {

public String inputss(){
try {
return "你哥";
} catch (Exception e) {
}
finally{
System.out.println("你妹");
}
return null;
}
public static void main(String[] args) {
Tes……
[/Quote]+1
枫之逆 2012-03-05
  • 打赏
  • 举报
回复
可以这样理解。。[Quote=引用 30 楼 superhill 的回复:]

分两种情况
如果没有异常,遇到return就直接跳到finally,执行完毕以后再return.
如果发生异常,那么就不管return,直接finally

不知道这样能不能理解,总的来说,你可以理解成,无论如何,都是先finally,然后再说return
[/Quote]
天堂的眼泪 2012-03-05
  • 打赏
  • 举报
回复
public class Test {

public String inputss(){
try {
return "你哥";
} catch (Exception e) {
}
finally{
System.out.println("你妹");
}
return null;
}
public static void main(String[] args) {
Test test=new Test();
String s=test.inputss();
System.out.println(s);

}

}


结果是:你妹
你哥
superhill 2012-03-05
  • 打赏
  • 举报
回复
分两种情况
如果没有异常,遇到return就直接跳到finally,执行完毕以后再return.
如果发生异常,那么就不管return,直接finally

不知道这样能不能理解,总的来说,你可以理解成,无论如何,都是先finally,然后再说return
执笔写年华 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 acesidonu 的回复:]
finally是必定会执行的,遇到return就会跳到finally里
[/Quote] 正解
孤雨 2012-03-05
  • 打赏
  • 举报
回复
你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果:

public class Test {



/**

* @param args add by zxx ,Dec 9, 2008

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(new Test().test());;

}

static int test()

{

int x = 1;

try

{

return x;

}

finally

{

++x;

}

}

}

---------执行结果 ---------

1

运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。

这个应该有总结了
寐梦海儿 2012-03-05
  • 打赏
  • 举报
回复
我可以很明确的告诉你肯定执行,而且是在之前执行!呵呵
muanping85 2012-03-05
  • 打赏
  • 举报
回复
肯定是先执行 finally 然后 在 执行 return
Eleven_git 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 huangck6633511 的回复:]
public class Test {

public String inputss(){
try {
return "你哥";
} catch (Exception e) {
}
finally{
System.out.println("你妹");
}
return null;
}
public static void main(String[] args) {
Tes……
[/Quote]
之前看代码老看不懂,自从看到了哪四个汉字 我终于从一名初级开发工程师一下子跳到了高级开发工程师的水平 +1
五哥 2012-03-04
  • 打赏
  • 举报
回复
finally 在return之前
秋水易逝 2012-03-04
  • 打赏
  • 举报
回复
没错finally是必走的,是在return后执行的我用过
jake512 2012-03-04
  • 打赏
  • 举报
回复
finally肯定是要执行的,即使你在try中用了return 那么也要wait()等到finally执行完成再返回。
不过,一般情况下在try中一般不用return,而是在最后才用return返回。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lufeng20 的回复:]
要是这样的话就疯了。。
其实有两种情况。。
1、try不出异常 则return之前执行,先finally在return
2、try出异常 则先finally,不执行try里的return了。。



引用 3 楼 ldh911 的回复:

我如果说:在return之后,函数返回之前。你是不是当场疯了?
[/Quote]
哈哈,还可以try第一步结果断电了,fi什么啊 re什么啊都没了
Papaver 2012-03-04
  • 打赏
  • 举报
回复
大概试了一下,debug的时候,在try或者catch中走到return的时候(不知道执行了没有),就跳到了finally中,执行了finally中的return。最终的返回结果也是finally中return的值。
可以简单地理解为,finally覆盖了前面的如return。
Woodpecker 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cai5 的回复:]

finally 在return之前
[/Quote]

try 中的return 会执行的..只不过 先执行了try 的 return 最终返回的时候又执行了 finally的 return 。

public class T {
static int i=0;
public static int test() {
try {
return ++i; //先执行return
} catch (Exception e) {
} finally {
return ++i; //再执行finally里的内容,最后返回的是finally里的值
}
}

public static void main(String[] args) {
System.out.println(test());
}
}
输出2
Woodpecker 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cai5 的回复:]

finally 在return之前
[/Quote]

try 中的return 会执行的..只不过 先执行了try 的 return 最终返回的时候又执行了 finally的 return 。

public class T {
static int i=0;
public static int test() {
try {
return ++i; //先执行return
} catch (Exception e) {
} finally {
return ++i; //再执行finally里的内容,最后返回的是finally里的值
}
}

public static void main(String[] args) {
System.out.println(test());
}
}
输出2
加载更多回复(18)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧