黑马程序员技术交流社区
标题:
finally 在return中间执行是什么意思
[打印本页]
作者:
逸盏清茶
时间:
2013-5-23 20:12
标题:
finally 在return中间执行是什么意思
本帖最后由 逸盏清茶 于 2013-5-28 18:23 编辑
public class Test {
public static void main(String[] args)
{
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
}
复制代码
运行结果是1 ,而不是2 , 张老师说finally 是在return中间执行是什么意思。不懂。
作者:
棉/mg花/x糖
时间:
2013-5-23 20:18
本帖最后由 棉/mg花/x糖 于 2013-5-23 20:21 编辑
没有吧,这个结构,finally是无论有无发生异常,都会执行:++x;
因为,finally句其实相当初始化快,在程序运行之前,就会先加载进内存,故“++x”会先于return之前执行,最会返回的值自然是"x+1"后的值。
作者:
薛淑凯
时间:
2013-5-23 20:45
本帖最后由 薛淑凯 于 2013-5-23 20:48 编辑
public class TestFinally {
static int f(){
int i=1;
try {
System.out.println("try----"+i);
return i;
}
finally{
++i;
System.out.println("finally---"+i);//返回的时候i的值没有变,函数返回后才执行的finally
}
}
public static void main(String[] args){
System.out.println(f());
}
}
/*
* try----1
* finally---2
* 1
*/
复制代码
作者:
clp
时间:
2013-5-23 21:55
可以把以下代码拷贝运行一下,应该能理解清楚
package com.itheima;
/**
* 第6题: 写一个类证明return是在finally执行后才返回的,且在finally无法改变返回值。
* @author Administrator
*
*/
public class Test6 {
public static void main(String[] args){
//创建FinallyDemo类对象
FinallyDemo fd = new FinallyDemo();
//定义整型变量接收fd调用函数show()的返回值
int x = fd.show();
//输出x
System.out.println("执行return,接收return返回值为 x="+x);
}
}
//创建 FinallyDemo类
class FinallyDemo{
//定义类方法show()
int show(){
//定义数组arr
int[] arr ={0,1,2,3} ;
int x=100;
//通过try{}finally{}检测异常
try{
x = arr[0];
System.out.println("执行到return语句之前");
return x;
}
finally{
System.out.println("执行了fianlly语句");
x=9999;
//验证finally先于return执行,且在finally虽然能给x赋值,却改变不了返回值
System.out.println("在fianlly中给 变量x赋值之后 x="+x);
}
}
}
作者:
刘胜寒
时间:
2013-5-24 00:46
楼主你好,如果问题以解决,请修改分类,谢谢合作。
作者:
袁梦希
时间:
2013-5-24 00:57
楼主你好,如果问题以解决,请修改分类,谢谢合作。
作者:
王靖远
时间:
2013-5-24 18:08
本来return后的语句就不可以执行了的。但是finally比较特殊,它在程序运行前就加载进内存,所以会在return前执行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2