导读:
最近研究Java,发现很多有趣的事情。今天又是一例。
先看代码(注意第5行和第8行的两个”return”)
publicclassTestClass{
public inttest(){
try{
System.out.println("step1")
return 1
}finally{
System.out.println("step2")//会执行吗?
return 2
}
}
public staticvoidmain(String[]args){
TestClass te=newTestClass()
int t=te.test()
System.out.println(t)
}
}
按理说,一个方法执行到return就应该返回,但是按照Java的规范,finally中的代码又是一定要被执行的。
先看看上面这个程序的运行结果:
step1
step2
2
可以看到,虽然在try块中遇到了return,但finally中的代码仍然被执行了。test()方法的返回值最终为2。
那么try块中的return语句没有用吗?不是的。
如果你注释掉第8行,即finally中的return语句,你会发现test方法最终会返回1。结果如下:
step1
step2
1
发散一下,如果我在catch中返回一个值,同时也在finally中加入一个return语句,结果会怎么样呢?
答案是:现象相同。catch中的return和finally中的return都会执行。有兴趣的可以试试。
标签: Finally, Java, Return
本文转自
http://webdn.trueself.cn/archives/83
最近研究Java,发现很多有趣的事情。今天又是一例。
先看代码(注意第5行和第8行的两个”return”)
publicclassTestClass{
public inttest(){
try{
System.out.println("step1")
return 1
}finally{
System.out.println("step2")//会执行吗?
return 2
}
}
public staticvoidmain(String[]args){
TestClass te=newTestClass()
int t=te.test()
System.out.println(t)
}
}
按理说,一个方法执行到return就应该返回,但是按照Java的规范,finally中的代码又是一定要被执行的。
先看看上面这个程序的运行结果:
step1
step2
2
可以看到,虽然在try块中遇到了return,但finally中的代码仍然被执行了。test()方法的返回值最终为2。
那么try块中的return语句没有用吗?不是的。
如果你注释掉第8行,即finally中的return语句,你会发现test方法最终会返回1。结果如下:
step1
step2
1
发散一下,如果我在catch中返回一个值,同时也在finally中加入一个return语句,结果会怎么样呢?
答案是:现象相同。catch中的return和finally中的return都会执行。有兴趣的可以试试。
标签: Finally, Java, Return
本文转自
http://webdn.trueself.cn/archives/83