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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-陈思源 中级黑马   /  2013-3-28 18:29  /  1808 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-陈思源 于 2013-3-29 13:53 编辑

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?   有人说是在return之前执行、、、那不是违背了一行一行执行的规律吗??

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-28 20:47

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 _王涛 于 2013-3-28 19:24 编辑

Java 编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块
  ;
当 try 中有 return 语句,java 先执行 try中非return 语句,再执行 finally 中的code语句;最后执行return。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在一个try-finally语句中,finally语句块总是在控制权离开try语句块时执行的。无论try语句块是正常结束的,还是意外结束的,情况都是如此。

也就是说先执行了finally中的语句,才执行try里面的return
回复 使用道具 举报
本帖最后由 寇弘禄 于 2013-3-28 22:44 编辑

先执行try里的return 语句,然后在执行 finally里的return 语句,最后返回finally 里return 的值。
下面这段代码是我模仿别人的写的,看看你就明白了。
  1. class  Test1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.             int i = new Test1().Method();
  6.             System.out.println(i);
  7.         }
  8.         public int Method(){
  9.             try{
  10.                     return Method1();
  11.             }
  12.             finally{
  13.                     return Method2();
  14.             }        
  15.         }
  16.         public int Method1(){
  17.                 System.out.println("111");
  18.                 return 1;
  19.         }
  20.         public int Method2(){
  21.                 System.out.println("222");
  22.                 return 2;
  23.         }
  24.         
  25. }
复制代码
结果是
111
222
2
回复 使用道具 举报
谢谢   有点概念咯  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马