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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹善波 中级黑马   /  2012-8-7 19:04  /  1486 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//finally、return问题
public class Finally1
{
  public static void main(String[] args)
   {
      System.out.print("s...."+method());
   }
  public static int method()
  {  
   int s = 23;
   try{
    System.out.println("try.."+s);
        return  s=88;
     }
  catch(Exception e){
           System.out.println("exception::" + e);
        }
  finally
   {
   System.out.println("fina..."+s);     
    s=4;
      System.out.println("finally..."+s);
  }
  System.out.println("f ly..."+s);//这一句怎么没有执行?
return   s ; //这个return到底是在finally前执行的还是之后执行的?finally中给s符的值
             // 为什么没有被返回?
}
}

3 个回复

倒序浏览
本帖最后由 杜佳瑞 于 2012-8-7 20:39 编辑

public class Finally1
{
        public static void main(String[] args)
        {
                System.out.print("s...."+method()); //首先,调用method方法,4,最后打印s....88
        }
        public static int method()
        {  
                int s = 23;
                try
                {
                        System.out.println("try.."+s); //1,打印try..23没问题,因为上面已经赋值
                        return  s=88;//return之前,先看看有没有finally,有就先执行finally,但是这里的返回值已经定了88.
                }                        
                catch(Exception e)
                {
                        System.out.println("exception::" + e);
                }
                finally
                {
                        System.out.println("fina..."+s);    //2,打印fina...88
                        s=4;
                        System.out.println("finally..."+s);//3,打印finally...4,finally执行完return s。
                }
                System.out.println("f ly..."+s);//这一句怎么没有执行?try里面已经return了,这句话肯定执行不到。
                return   s ; //这个return到底是在finally前执行的还是之后执行的?finally中给s符的值,这也执行不到                 
                              // 为什么没有被返回?
        }
}
回复 使用道具 举报
本帖最后由 黑马-唐磊 于 2012-8-7 20:03 编辑

你将“System.out.println("f ly..."+s);”放在finally代码块内部它就会执行,因为finally代码块执行完后它后面的就不会执行了且只会执行一次,所以后面的“System.out.println("f ly..."+s);”不会执行,它在这里返回了一个值,它将return s=88的存储的临时变量返回给了它的本类方法,所以主函数中打印method值就为88
回复 使用道具 举报
这是return和finally执行的问题。
一个有返回值的方法,当执行到return语句的时候,就退出方法了。不过,finally语句是必须执行的语句。即执行到return  s=88;时方法体已经得到了返回值,它只是等待finally执行完。
而后执行finally语句,虽然s的值变化了,但不会改变返回值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马