黑马程序员技术交流社区

标题: finally、return问题 [打印本页]

作者: 尹善波    时间: 2012-8-7 19:04
标题: finally、return问题
//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符的值
             // 为什么没有被返回?
}
}

作者: 杜佳瑞    时间: 2012-8-7 19:54
本帖最后由 杜佳瑞 于 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 19:57
本帖最后由 黑马-唐磊 于 2012-8-7 20:03 编辑

你将“System.out.println("f ly..."+s);”放在finally代码块内部它就会执行,因为finally代码块执行完后它后面的就不会执行了且只会执行一次,所以后面的“System.out.println("f ly..."+s);”不会执行,它在这里返回了一个值,它将return s=88的存储的临时变量返回给了它的本类方法,所以主函数中打印method值就为88
作者: 周坤    时间: 2012-8-7 20:08
这是return和finally执行的问题。
一个有返回值的方法,当执行到return语句的时候,就退出方法了。不过,finally语句是必须执行的语句。即执行到return  s=88;时方法体已经得到了返回值,它只是等待finally执行完。
而后执行finally语句,虽然s的值变化了,但不会改变返回值。





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