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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmlovewhr 中级黑马   /  2013-7-7 22:50  /  1423 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-8 21:08 编辑

class wTest
{
public static void main(String[] args)
{
  System.out.println(new wTest().test());
}
int test()
{
  try
  {
   return func1();
  }
  finally
  {
   return  func2();
  }
}
int func1()
{
  System.out.println("func1");
  return 1;
}
int func2()
{
  System.out.println("func2");
  return 2;
}
}
你能告诉我最后的运行结果是什么吗?那么为什么会有这样的运行结果,求个解释。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

5 个回复

倒序浏览
try  {  //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容  }  catch  {  //除非try里面执行代码发生了异常,否则这里的代码不会执行  }  finally  {  //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally  }  

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 方珂 于 2013-7-7 23:13 编辑

所以你这程序的运行结果是
func1
func2
2
回复 使用道具 举报
主函数输出语句中调用了Test方法,输出Test的返回值,所以先执行Test方法,当程序执行到return func1();的时候,因为调用到了func1方法,所以首先输出了func1,并且因为func1的返回值是1,此时Test方法的返回值为1,但此时因为Test方法中有finally是必须要执行的,所以Test方法又执行了return func2();,因为调用到func2()方法,所以输出func2,因为func2方法的返回值是2,所以此时Test方法又获得了返回值2,此返回值覆盖掉之前的返回值1,所以Test方法的返回值为2,所以最后主函数输出2
所以结果是
func1
func2
2
回复 使用道具 举报
本帖最后由 majunm 于 2013-7-8 13:41 编辑

try 语句就是挑毛病的 有毛病的话 就会被catch抓住 它可以解决毛病或者抛出毛病 没有毛病就往下走 finally语句 一定会执行  例外情况: 虚拟机退出 finally 语句不执行!

try{
    int x= 12/0;//这句话有毛病
   return;//一般函数返回 剩下的语句不再执行 事实上 finally语句 不管这个 照样执行
}catch(Exception e){
      System.out.println(“大哥!除数为0了....”);
}finally{
      System.out.println(“哥哥一定执行的”);
}
打印结果:
大哥 除数为0了
哥哥一定会执行的


try{
   
int x= 12/2;
system。out。println(“x=”+x);
   system。exit(0);//虚拟机系统退出  finally语句不再执行
}finally{
     System.out.println(“哥哥一定执行的”);
}
打印结果:
x=6
自己手打的 不管代码的正确性啊《我这算充当伪代码》 你别告诉我 system首字母没大写!!!.....

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报

楼主您好,我已将您帖子的状态改成“已解决”,对此如有疑问可以通过QQ632763270和我取得联系

-------------------坚持学习,黑马因你而精彩---------------
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马