java try catch return 谁先执行问题,你能说明白吗
问题1try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?也许你的答案是在re...
问题1
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
也许你的答案是在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;
}
}
}
---------执行结果是什么 为什么 ---------
问题2
下面的程序代码输出的结果是多少?
public class smallT
{
public static void main(String args[])
{
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
} 展开
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
也许你的答案是在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;
}
}
}
---------执行结果是什么 为什么 ---------
问题2
下面的程序代码输出的结果是多少?
public class smallT
{
public static void main(String args[])
{
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
} 展开
6个回答
展开全部
第一个问题:输出的是1,因为finally总是在try-catch执行之后执行,而且,一定是在return之前执行。第一个问题里应该是在return x;之前执行,但是,此时return的值已经固定了,就是说finally再执行也改变不了return的值,当然x的值成了2,但是return的值已经固定为1了。
第二个问题:输出的是2,因为finally一定是在return之前执行,本来程序return的值是1,即将要return了,但是有finally,所以finally先执行,所以return的值是2。
但是第二种情况不建议使用,就是说finally里不建议用return,因为这样finally就没有正常的执行完毕,这是不推荐的。
第二个问题:输出的是2,因为finally一定是在return之前执行,本来程序return的值是1,即将要return了,但是有finally,所以finally先执行,所以return的值是2。
但是第二种情况不建议使用,就是说finally里不建议用return,因为这样finally就没有正常的执行完毕,这是不推荐的。
2015-12-11 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
先执行try,直接在try和catch之间填充需要捕获异常的代码,之后如果有异常直接走catch分支,进行异常捕获。
如:
try{
//先执行
} catch (Exception e) {
System.out.println(e.getMessage()); //如果有异常则执行
}
return;//如果没有异常则执行
解释:以上代码中如果在”//需要捕获异常的代码“ 中有错误,会直接进行控制台输出。
如:
try{
//先执行
} catch (Exception e) {
System.out.println(e.getMessage()); //如果有异常则执行
}
return;//如果没有异常则执行
解释:以上代码中如果在”//需要捕获异常的代码“ 中有错误,会直接进行控制台输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题1 输出结果是1
问题2 输出结果是2
finally中的语句是一定要执行的,这点是肯定的。finally中的语句执行在try之后。通常try是要和catch(不捕获异常try就没意义了)。一般的用法是:
try{
1想要执行的代码
}catch(Exception e){
2异常处理
}finally{
3最终执行的代码
}
1中代码没错执行的顺序就是1->3
1中代码有错执行的顺序是2->3
finally中的代码和return是没关系的,你可以把return写在任何地方。它只和try、catch有关。假如你把问题一种finally的代码写成:
finally{
return ++x;
}那么结果就是2了。
finally一定会执行,且在try或catch之后执行。
不知道这么说能明白吗~~~
不明白可以问,我再回答~~~
问题2 输出结果是2
finally中的语句是一定要执行的,这点是肯定的。finally中的语句执行在try之后。通常try是要和catch(不捕获异常try就没意义了)。一般的用法是:
try{
1想要执行的代码
}catch(Exception e){
2异常处理
}finally{
3最终执行的代码
}
1中代码没错执行的顺序就是1->3
1中代码有错执行的顺序是2->3
finally中的代码和return是没关系的,你可以把return写在任何地方。它只和try、catch有关。假如你把问题一种finally的代码写成:
finally{
return ++x;
}那么结果就是2了。
finally一定会执行,且在try或catch之后执行。
不知道这么说能明白吗~~~
不明白可以问,我再回答~~~
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问那么多次,没意义,看另一个答案
追问
重复提交了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果应该是1 2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询