A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾玉锋 高级黑马   /  2012-7-18 10:03  /  2118 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写了一个小程序
....
int i=0;
try{
   i=50;
   console.writeLine(i);
   return;
}
finally{
   i=100;
   console.writeLine(i);
}
....

输出结果是
50
100


求解释,谢谢。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

7 个回复

倒序浏览
1,先执行try里面语句;
2,再执行finally里面语句;
3,return;//退出try语句模块,程序继续往下执行finally模块;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2012-7-18 10:26
1,先执行try里面语句;
2,再执行finally里面语句;
3,return;//退出try语句模块,程序继续往下执行fina ...

额,我以前在资料上看的return 语句是直接结束方法。try{}finally{} 中的return 是个例么?还是前面我的理解有错误?
回复 使用道具 举报
在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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
陈冲 发表于 2012-7-18 10:43
在try-catch-finally语句中,不论前边的代码怎么运行的,finally中的代码一定会执行;
再说,那个return只 ...

嗯,明白了,谢谢!反正finally{}一定要执行就是了
回复 使用道具 举报
曾玉锋 发表于 2012-7-18 10:36
额,我以前在资料上看的return 语句是直接结束方法。try{}finally{} 中的return 是个例么?还是前面我的 ...

是啊,try里面的return结束的是try{},而没结束finally{}.
回复 使用道具 举报
try
{
}
catch
{
}
finally
{
}
此为异常处理的语法,如果try{}里面的程序正确执行,则就输出try{}里面的结果,否则会输出catch{}里面的结果,不管前面输出的是try{}还是catch{},finally{}里面的程序都会执行!
以以上为例:
try{}里面的正确执行,则输出50,但finally{}里面的总会执行,所以再输出100

以上希望有所帮助,谢谢!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
这是异常处理。
try
{
     //需要被检测的代码
}
catch (异常量 变量)
{
    //异常处理代码
}
finally
{
    //一定会被执行的代码。
}
....
int i=0;
try{
   i=50;
   console.writeLine(i);
   return;//这里的ruturn的作用范围只在try的大括号里面,结束的就是这一个大括号的
}//继续向下执行
finally{
   i=100;//执行到这里没有异常,然后就是打印了
   console.writeLine(i);
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马