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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵庆礼 中级黑马   /  2012-7-4 23:15  /  1709 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  赵庆礼 于 2012-7-5 11:43 编辑

public  class Test {
     public static void main(String[] args) {
          System.out.println(new Test().test());;
     }
     static int test()
     {
          int n = 1;
          try
          {
              return n;
          }
          finally
          {
              ++n;
          }
     }
}
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

点评

论坛里有很多关于try、catch、finally执行顺序的帖子,而且很详细,楼主可以看一下。  发表于 2012-7-5 17:55

7 个回复

倒序浏览
finally里的代码一定会执行,是在return之前执行,你debug下就可以看到执行流程。
回复 使用道具 举报
finally里的语句是一定会执行的,但是是在return前执行,但是如果finally里没有return语句的话,会把try里的结果返回去做最终结果,如果finally里有return语句的话,会以finally里返回的结果做为最终结果的。你题里是先执行++n,但是并没有返回,所以try里面返回的n仍是1,打印结果是1

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
package exception;

public class ExceptionTest1 {
       
  public static void main(String[] args) {
       
          int  c=0 ;
          
          try {
                  
                  int  a = 3;
                  
                  int b = 20;
                  
                   c = a/b;
                  System.out.println("hello world");
                  
          }
          
          catch (ArithmeticException  e){
                  
                  e.printStackTrace();
          }
          
          finally{
                  
                  System.out.println("this  is   a   ArithmeticException");
          }
          
          
          System.out.println(c);
}

}
执行结果为hello world
this  is   a   ArithmeticException
0
第二个程序是
package exception;

public class ExceptionTest2 {
       
        public  void  method() throws Exception{
               
                System.out.println("hello world ");
               
                throw new Exception();
        }
       
      public static void main(String[] args)  {
               
              ExceptionTest2  test = new ExceptionTest2();
              
              try {
                        test.method();
                } catch (Exception e) {
                       
                        e.printStackTrace();
                }
              
              finally {
                      
                      System.out.println( "this  programe  is  over");
              }
        }

}
执行结果为
java.lang.Exception
        at exception.ExceptionTest2.method(ExceptionTest2.java:9)
        at exception.ExceptionTest2.main(ExceptionTest2.java:17)
hello world
this  programe  is  over
自己看一下就知道为什么了啊
回复 使用道具 举报
finally代码快中,不管是从try跳出前,还是才catch跳出前,都要执行finally的代码,即使是return语句,也要执行finally,除非你的代码直接结束虚拟机。
回复 使用道具 举报
张天天 发表于 2012-7-5 06:45
package exception;

public class ExceptionTest1 {

谢谢,有点明白了
回复 使用道具 举报
韦念欣 发表于 2012-7-5 08:23
finally代码快中,不管是从try跳出前,还是才catch跳出前,都要执行finally的代码,即使是return语句,也要 ...

谢谢版主
回复 使用道具 举报
应该说是在return 中执行。  会先执行 try里面  return 后面的语句  在执行 fanally里面的语句  最后在执行try里面的 return。 如果fanally里面有return , try里面的return就不会执行了
这个问题在11期有人回答的很详细。  各种情况都说了,你可以去找找。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马