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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adf 初级黑马   /  2014-4-21 14:22  /  805 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的程序代码输出的结果是多少?
  1. public class  smallT
  2. {
  3.         public static void  main(String args[])
  4.         {
  5.                 smallT t  = new  smallT();
  6.                 int  b  =  t.get();
  7.                 System.out.println(b);
  8.         }
  9.        
  10.         public int  get()
  11.         {
  12.                 try
  13.                 {
  14.                         return 1 ;
  15.                 }
  16.                 finally
  17.                 {
  18.                         return 2 ;
  19.                 }
  20.         }
  21. }
复制代码


3 个回复

正序浏览
public class  smallT
{
        public static void  main(String args[])
        {
                smallT t  = new  smallT();
                int  b  =  t.get();
                System.out.println(b);
        }
        
        public int  get()      //你函数的返回值类型是int.  try finally中的finally的代码一定会被执行,try是来检测代码                           
        {                              //异常的.一个有返回值的函数只会执行一个return.所以就把2反过去了.
                try
                {
                        return 1 ;
                }
                finally
                {
                        return 2 ;
                }
        }
}
回复 使用道具 举报
结果是2,因为finally里面的语句一定会执行的。
回复 使用道具 举报
返回的结果是2
我可以通过下面一个例子程序来帮助你解释这个答案,从下面例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。
在讲解答案时可以用下面的程序来帮助分析:
  1. public  class Test {

  2.     /**
  3.      * @param args add by zxx ,Dec 9, 2008
  4.      */
  5.     public static void main(String[] args) {
  6.        // TODO Auto-generated method stub
  7.        System.out.println(new Test().test());;
  8.     }

  9.     int test()
  10.     {
  11.        try
  12.        {
  13.            return func1();
  14.        }
  15.        finally
  16.        {
  17.            return func2();
  18.        }
  19.     }
  20.    
  21.     int func1()
  22.     {
  23.        System.out.println("func1");
  24.        return 1;
  25.     }
  26.     int func2()
  27.     {
  28.        System.out.println("func2");
  29.        return 2;
  30.     }  
  31. }
复制代码


-----------执行结果-----------------
func1
func2
2
结论:finally中的代码比return break语句后执行

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