美文网首页
finally语句与return a++

finally语句与return a++

作者: GG锅 | 来源:发表于2018-03-26 10:53 被阅读15次

finally与return a++

一、描述

当我知道 return a++; 是先返回再+1的,但是突然想起如果用try/finally语句捕获时,突然发现有三种有趣的情况:

  1. return a++;
  2. return ++a;
  3. return a+1;
    分别在finally语句会有不同的输出。

二、具体

代码如下:

public class Test {
    public static void main(String[] args) {
        System.out.println("s:"+test(1));
    }
    static int test(int a){
        try {
            //依次修改此处
            return a++;
            //return ++a;
            //return a+1;
        }finally {
            System.out.println("f:"+a);
        }
    }
}

运行结果依次如下

  1. return a++;
f:2
s:1
  1. return ++a;
f:2
s:2
  1. return a+1;
f:1
s:2

我们知道finally语句是在方法结束前运行的,其实上述代码反编译字节码之后会发现:

import java.io.PrintStream;

public class Test
{

    public Test()
    {
    }

    public static void main(String args[])
    {
        System.out.println((new StringBuilder()).append("s:").append(test(1)).toString());
    }

    static int test(int a)
    {
        int i = a++;//主要改此处
        System.out.println((new StringBuilder()).append("f:").append(a).toString());
        return i;
        Exception exception;
        exception;
        System.out.println((new StringBuilder()).append("f:").append(a).toString());
        throw exception;
    }
}

原来其实return后面的表达式,编译器会创建临时变量,操作完成再返回。

相关文章

  • finally语句与return a++

    finally与return a++ 一、描述 当我知道 return a++; 是先返回再+1的,但是突然想起如...

  • try、catch、finally

    任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。...

  • java中return和finally的执行问题

    try中有return:先执行try代码块,return语句或者函数也先执行,然后执行finally语句,最后执行...

  • java finally陷阱

    Java finally语句到底是在return之前还是之后执行? Java中try catch finally语...

  • try catch finally 和return问题

    1.如果三个语句中均有return,无论三个语句是否抛出异常,都将执行finally语句中的return。 2.t...

  • 关于Java中try-catch-finally-return

    try和catch代码块中的return语句并不是函数的最终出口,如果有finally语句,这在return之后还...

  • finally和return

    其实return与finally并没有明显的谁强谁弱。在执行时,是return语句先把返回值写入但内存中,然后停下...

  • Kotlin异常处理(5)补充:典型异常面试题

    finally不被执行情况【仅此一种情况下不执行】finally中的代码块先于return语句执行finally代...

  • finally代码一定会执行吗

    当然不一定: (1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执...

  • finally语句块

    finally语句块与return 运行下面的代码,想想在程序正常运行时输出什么,出现异常时输出什么? 运行上面的...

网友评论

      本文标题:finally语句与return a++

      本文链接:https://www.haomeiwen.com/subject/neglcftx.html