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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public  class Test {

  2.          

  3.     /**

  4.      * @param args add by zxx ,Dec 9, 2008

  5.      */

  6.     public static void main(String[] args) {

  7.          // TODO Auto-generated method stub

  8.          System.out.println(new Test().test());;

  9.     }

  10.     static int test()

  11.     {

  12.          int x = 1;

  13.          try

  14.          {

  15.              return x;

  16.          }

  17.          finally

  18.          {

  19.              x = 5;

  20.          }

  21.     }

  22. }
复制代码
结果为1,比较纠结,帮忙看看

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
你是想说在finally里给x重新赋值,但是打印出来还是原来那个值是吧,你可以去看看这个帖子http://bbs.itheima.com/forum.php?mod=viewthread&tid=28348
如果try语句体中含有return语句,就会把要return的值存放在一个不同于x的变量中,当finally执行完后
再从中取出值,所以你在finally中改变x的值不会影响try中要返回的值,因为这是从先前保存的另一个不同于x的变量中取得的

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
执行try里边的代码,返回x=1,finally 中x=5,但你打印的是 System.out.println(new Test().test());而Test函数只返回了x=1;finally中虽然改变了x的值,但没有返回给函数,所以打印结果是1
回复 使用道具 举报
return x  把x的值已经返回,放在了主函数中,只是还没有打印,后面执行完finaly里面的语句后,在打印return的X值(return的x值为1)
回复 使用道具 举报
王威 发表于 2012-10-18 14:04
你是想说在finally里给x重新赋值,但是打印出来还是原来那个值是吧,你可以去看看这个帖子http://bbs.ithei ...

thanks 多谢
回复 使用道具 举报
try中有个return语句,会把x的值返回给主函数,而下面final语句中没有return,只会重新给x赋值,但是主函数只会打印原来return过来的x值。
回复 使用道具 举报
崔政 中级黑马 2012-10-18 23:28:00
7#
想要5是吧,给你5.
你try代码块中已经返回值,而你定义的x是在方法中,和返回的结果无关。。
还有,既然方法已经static了,就不要再new对象了{:soso_e134:}
  1. public  class Test {

  2.     public static void main(String[] args)
  3.     {
  4.          System.out.println(test());;
  5.     }
  6.     static int test()
  7.     {
  8.          int x = 1;
  9.          try{
  10.           return x;
  11.          }
  12.          finally
  13.          {
  14.              return x = 5;
  15.          }
  16.     }
  17. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马