搜索

首页  >  问答  >  正文

java - 问题如图,为什么返回值是1

大家讲道理大家讲道理2900 天前319

全部回复(7)我来回复

  • ringa_lee

    ringa_lee2017-04-18 09:58:11

    http://m.blog.csdn.net/article...

    回复
    0
  • PHPz

    PHPz2017-04-18 09:58:11

    如图,首先得明白当
    1,finally中没有return的时候:finally中没有return的时候:
    会先执行try里面的,return会执行但是没有真正的return,此时去执行了finally里面的语句,然后再返回来执行return,所以如上题x1:1,然后return x++;这时候它会返回1出去,但是finally是无论如何都会执行的,所以它并不是立刻返回,而是先执行finally里的语句,然后得到 x3:3会先执行try里面的,return会执行但是没有真正的return,此时去执行了finally里面的语句,然后再返回来执行return,所以如上题x1:1,然后return x++;这时候它会返回1出去,但是finally是无论如何都会执行的,所以它并不是立刻返回,而是先执行finally里的语句,然后得到 x3:3,但是,重点是:因为finally中没有return ,所以finally中对x的改变都不会影响之前return的值,因为之前return出去的是1;所以即使后面的finally重新改变的x的值,然后再次执行return,但是依旧返回之前的1.。就是说return 出去的时候是几就是几,除非finally重新return才会改变
    2,finally中有return的时候:
    会先执行try里面的,return会执行但是没有真正的return此时去执行了finally里面的,然后执行finally里面的return,直接返回。

    望采纳。

    回复
    0
  • 阿神

    阿神2017-04-18 09:58:11

    代码流程
    声明变量 x = 1x = 1
    抓到异常 执行return x++ 此时x = 2,但是x++这个值是1,但是没有执行return这个动作
    finally 执行, x = 3, 然后return抓到异常 执行return x++ 此时x = 2,但是x++这个值是1,但是没有执行return这个动作

    finally 执行, x = 3, 然后return跳回.#🎜🎜#

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:58:11

    先抛出异常,然后先返回x值(1),之后类里面的x再自增1,不知道对不对,我也是初学。

    回复
    0
  • 怪我咯

    怪我咯2017-04-18 09:58:11

    return x++运算符,先左边返回,然后x自增1。return ++x应该返回2

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:58:11

    表达式++X的含义是:X加一,且表达式的值为X加一;

    表达式X++的含义是:X加一,但表达式的值仍为X。

    回复
    0
  • 高洛峰

    高洛峰2017-04-18 09:58:11

    1.在try catch finally中的任何地方有return的地方,都是先把当前值保存到栈中,但是并不是立即返回,后面的依旧会执行,finally中的语句始终会被执行。但是返回的值,已经事先放在了栈中的,所以返回的依然是1,你把return 语句分别放在try catch finally中,可以依次看到执行不同的结果。

    回复
    0
  • 取消回复