黑马程序员技术交流社区
标题:
try {}里有一个return语句,那么紧跟在这个try后的finally {}里...
[打印本页]
作者:
谢毅
时间:
2013-1-18 22:30
标题:
try {}里有一个return语句,那么紧跟在这个try后的finally {}里...
本帖最后由 谢毅 于 2013-1-19 12:57 编辑
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
作者:
梁俊
时间:
2013-1-18 22:38
本帖最后由 梁俊 于 2013-1-18 22:40 编辑
try中的return语句调用的函数先与finally中调用的函数,也就是说return语句先执行finally语句后执行,所以返回的结果是1。
return并不是让函数马上返回,而是return语句执行后,将把返回结果放置静函数栈中,此时函数并不是马上返回,它要执行
finally语句后才真正开始返回。
可以从以下程序看出来
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());;
}
int test()
{
try
{
return func1();
}
finally
{
return func2();
}
}
int func1()
{
System.out.println("func1");
return 1;
}
int func2()
{
System.out.println("func2");
return 2;
}
}
复制代码
-----------执行结果-----------------
func1
func2
2
结论:finally中的代码比return 和break语句后执行
作者:
txl
时间:
2013-1-18 22:50
本帖最后由 黑马唐贤来 于 2013-1-18 23:05 编辑
同学,那肯定是1了,
static int test()
{
int x = 1;
try {
return x; //先return,才会执行finally
}
finally
{
++x;
System.out.println(x); //这里才是2
}
复制代码
作者:
王溢君
时间:
2013-1-18 22:50
不执行finally的语句只有一条,那就是java.exit(0);其他的全部要执行的。
作者:
陈雪平
时间:
2013-1-18 23:01
二楼的哥们,return在try...catch...finally语句中是跳不出来的,依旧会执行finally里面的语句的。
作者:
贾文泽
时间:
2013-1-19 01:42
3楼正解
作者:
王晓斌
时间:
2013-1-19 10:43
一、如果try catch finally块均无return则执行最后finally外的return;
如果try catch finally中任何一个有return则最后finally外的return不再执行;
二、只要finally块中有return则try或catch中的return不再执行.
总结:任何调用try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。
作者:
黄金龙
时间:
2013-1-19 10:46
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;//这里才是return回去的值.所以是1
}
finally
{
++x;//这里是一定执行的x=2了..但是没return
}
}
}
为什么结果是1
复制代码
作者:
柴乔军
时间:
2013-1-19 14:09
本帖最后由 柴乔军 于 2013-1-19 14:13 编辑
虽然,finally内的代码会在return之前执行,但是finally内的代码不能修改return 返回的值
作者:
柴乔军
时间:
2013-1-19 14:17
public class Test {
public static void main(String[] args) {
//调用测试方法
int i = test();
//输出i的结果,证明在finally中是否被修改
System.out.println(i);
}
public static int test() {
//定义一个变量
int i = 123;
try {
//表示try内的代码被执行
System.out.println("--------try---------");
//返回i的值
return i;
} finally {
//对i进行重新赋值
i = 222;
//表示finally块中的代码被执行
System.out.println("---------finally--------");
}
}
}
复制代码
结果:
--------try---------
---------finally--------
123
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2