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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class  T

{

      public static void  main(String args[])

      {

            T t  = new T();

            int  b  =  t.get();

            System.out.println(b);

      }

      

      public int  get()

      {

            try

            {

                  return 4 ;

            }

            finally

            {

                  return 5 ;

            }

      }

}

这个为什么finally的语句里面会后执行 为什么结果是5?  希望大虾们给我讲清楚点

7 个回复

倒序浏览
本帖最后由 房宝彬 于 2012-3-9 23:35 编辑



就是finally是一定会被执行到的代码
回复 使用道具 举报
我觉得b应该得到了两次值,先执行try中的 return 4.  b=4.  但是finally是一定会执行的,所以  有把b赋值成5了。
回复 使用道具 举报
又看到小房了,哈~~
在try里,执行到return前面的时候,直接去执行finally,在finally里有return因此直接从finally跳出方法了。try里的return就不会执行。
如果finally里没有return语句,那么执行完finally就会继续执行try里的return。
回复 使用道具 举报
finally在try catch 后面是不管怎样怎样都是会执行的代码!
回复 使用道具 举报
try-catch-finally语句中,如果try语句块中有return语句,那么在没有异常的情况下,在虚拟机执行到try的return之前,会先跳到finally中执行其中的代码。只有这样,才符合finally的定义:一定会执行的代码。
然后再回到try中,执行return语句。
本例中因为finally中是一个return语句,直接就返回了5,try中的return没有执行。
如果把你的代码改成这样你会更理解的:
  1. public class  T

  2. {

  3.       public static void  main(String args[])

  4.       {

  5.             T t  = new T();

  6.             int  b  =  t.get();

  7.             System.out.println(b);

  8.       }

  9.       

  10.       public int  get()

  11.       {

  12.             try

  13.             {
  14.                                 System.out.println("try语句块");
  15.                 return 4 ;

  16.             }

  17.             finally

  18.             {
  19.                                 System.out.println("finally语句块");
  20.                                 //return 5 ;

  21.             }

  22.       }

  23. }
复制代码
运行结果:

try语句块
finally语句块
4
回复 使用道具 举报
            try
            {
              
            }
            finally
            {
               
            }
在代码中,finally里边定义的是必须要执行的代码,也就是说不管上边其他代码只想到了没有,但是finally里边的代码是一定要执行的,就本题来说,retrun 5是一定要执行的,所以结果是5
回复 使用道具 举报
很好,学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马