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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵海洋 于 2013-7-6 18:28 编辑

class  wangDemo
{
public static void main(String[] args)
{
  wangDemo t=new wangDemo();
  int b=t.get();
  System.out.println("Third:a="+b);
}
public int get()
{
  try
  {
   System.out.println("First a="+2);
   return 2;
  }
  catch (Exception e)
  {
   System.out.print(3);
  }
  finally
  {
   System.out.println("Second:a="+4);
   return 4;
  }
}
}
为什么输出结果是:First:a=2
                             Second:a=4
                             Third:a=4
它明明是一个需要返回一个int整数的方法啊,不解,求高手帮忙解释下。在这里先谢谢了。

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
return 的时候把返回值压栈,然后继续执行finally的代码,执行结束以后把返回值出栈,再把返回值返回去。
你这代码return了两次,所以出栈时把第二次压栈的值弹出去了

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
???表示没听懂LZ想问什么?public int get(){}方法不是已经有返回int类型值吗?
1、前两个打印语句时方法执行到该代码时打印的语句,跟返回值无关;
2、为什么会返回4而不是返回2?   因为finally是一定会执行代码,虽然try块中已经返回int值 2,但是这个值会先存储在内存该方法的某个容器中,直到方法代码执行结束才会返回,但是在执行到finally块时该容器变量值被修改为4,因此最终返回值int值是4.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马