黑马程序员技术交流社区

标题: try{}finally{}和return [打印本页]

作者: 曾玉锋    时间: 2012-7-18 10:03
标题: try{}finally{}和return
写了一个小程序
....
int i=0;
try{
   i=50;
   console.writeLine(i);
   return;
}
finally{
   i=100;
   console.writeLine(i);
}
....

输出结果是
50
100


求解释,谢谢。
作者: 许庭洲    时间: 2012-7-18 10:26
1,先执行try里面语句;
2,再执行finally里面语句;
3,return;//退出try语句模块,程序继续往下执行finally模块;

作者: 曾玉锋    时间: 2012-7-18 10:36
许庭洲 发表于 2012-7-18 10:26
1,先执行try里面语句;
2,再执行finally里面语句;
3,return;//退出try语句模块,程序继续往下执行fina ...

额,我以前在资料上看的return 语句是直接结束方法。try{}finally{} 中的return 是个例么?还是前面我的理解有错误?
作者: 陈冲    时间: 2012-7-18 10:43
在try-catch-finally语句中,不论前边的代码怎么运行的,finally中的代码一定会执行;
再说,那个return只是结束了所在代码块,下边的代码还是要执行的。
  1. int i=0;
  2. try{
  3.    i=50;
  4.    console.writeLine(i);
  5.    return;//只结束当前代码块,这里不是结束整个try-catch-finally语句
  6. }
  7. finally{//不管之前的代码怎样执行的,这个代码块中的一定会执行
  8.    i=100;
  9.    console.writeLine(i);
  10. }
复制代码

作者: 曾玉锋    时间: 2012-7-18 10:54
陈冲 发表于 2012-7-18 10:43
在try-catch-finally语句中,不论前边的代码怎么运行的,finally中的代码一定会执行;
再说,那个return只 ...

嗯,明白了,谢谢!反正finally{}一定要执行就是了

作者: 许庭洲    时间: 2012-7-18 10:59
曾玉锋 发表于 2012-7-18 10:36
额,我以前在资料上看的return 语句是直接结束方法。try{}finally{} 中的return 是个例么?还是前面我的 ...

是啊,try里面的return结束的是try{},而没结束finally{}.
作者: 红叶杉杉    时间: 2012-7-18 11:02
try
{
}
catch
{
}
finally
{
}
此为异常处理的语法,如果try{}里面的程序正确执行,则就输出try{}里面的结果,否则会输出catch{}里面的结果,不管前面输出的是try{}还是catch{},finally{}里面的程序都会执行!
以以上为例:
try{}里面的正确执行,则输出50,但finally{}里面的总会执行,所以再输出100

以上希望有所帮助,谢谢!
作者: 京鱼龙    时间: 2012-7-18 23:48
这是异常处理。
try
{
     //需要被检测的代码
}
catch (异常量 变量)
{
    //异常处理代码
}
finally
{
    //一定会被执行的代码。
}
....
int i=0;
try{
   i=50;
   console.writeLine(i);
   return;//这里的ruturn的作用范围只在try的大括号里面,结束的就是这一个大括号的
}//继续向下执行
finally{
   i=100;//执行到这里没有异常,然后就是打印了
   console.writeLine(i);
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2