黑马程序员技术交流社区

标题: try-finally 问题。 [打印本页]

作者: 黑马-陈思源    时间: 2013-3-28 18:29
标题: try-finally 问题。
本帖最后由 黑马-陈思源 于 2013-3-29 13:53 编辑

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?   有人说是在return之前执行、、、那不是违背了一行一行执行的规律吗??
作者: _王涛    时间: 2013-3-28 19:20
本帖最后由 _王涛 于 2013-3-28 19:24 编辑

Java 编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块
  ;
当 try 中有 return 语句,java 先执行 try中非return 语句,再执行 finally 中的code语句;最后执行return。
作者: 黄杨    时间: 2013-3-28 22:24
在一个try-finally语句中,finally语句块总是在控制权离开try语句块时执行的。无论try语句块是正常结束的,还是意外结束的,情况都是如此。

也就是说先执行了finally中的语句,才执行try里面的return
作者: 寇弘禄    时间: 2013-3-28 22:43
本帖最后由 寇弘禄 于 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
作者: 黑马-陈思源    时间: 2013-3-29 13:51
谢谢   有点概念咯  




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