黑马程序员技术交流社区

标题: try中的return语句和finally中的语句执行先后顺序 [打印本页]

作者: 王自强    时间: 2012-10-18 13:56
标题: try中的return语句和finally中的语句执行先后顺序
  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,比较纠结,帮忙看看


作者: 王威    时间: 2012-10-18 14:04
你是想说在finally里给x重新赋值,但是打印出来还是原来那个值是吧,你可以去看看这个帖子http://bbs.itheima.com/forum.php?mod=viewthread&tid=28348
如果try语句体中含有return语句,就会把要return的值存放在一个不同于x的变量中,当finally执行完后
再从中取出值,所以你在finally中改变x的值不会影响try中要返回的值,因为这是从先前保存的另一个不同于x的变量中取得的
作者: 古银平    时间: 2012-10-18 14:04
执行try里边的代码,返回x=1,finally 中x=5,但你打印的是 System.out.println(new Test().test());而Test函数只返回了x=1;finally中虽然改变了x的值,但没有返回给函数,所以打印结果是1
作者: 李贺晓    时间: 2012-10-18 14:11
return x  把x的值已经返回,放在了主函数中,只是还没有打印,后面执行完finaly里面的语句后,在打印return的X值(return的x值为1)
作者: 王自强    时间: 2012-10-18 14:19
王威 发表于 2012-10-18 14:04
你是想说在finally里给x重新赋值,但是打印出来还是原来那个值是吧,你可以去看看这个帖子http://bbs.ithei ...

thanks 多谢
作者: 黑马-zhangping    时间: 2012-10-18 14:52
try中有个return语句,会把x的值返回给主函数,而下面final语句中没有return,只会重新给x赋值,但是主函数只会打印原来return过来的x值。
作者: 崔政    时间: 2012-10-18 23:28
想要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. }
复制代码





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