try catch finally return

我感觉这个问题,在java中应当经常被问到,结合简单的代码来看。

一般而言,我们都知道的一句话,try..catch...finally代码块在执行的时候,无论如何都会执行finally中的内容。

1.try 块 和 finally块中都有return,执行try块中的内容之后,执行finally块,并且用finally中的return结束函数的执行。

public int test1() {
		try {
			System.out.println("try block");
			return 0;
		} catch (Exception e) {
			System.out.println("catch block");
			return 1;	// return from catch block
		} finally{
			System.out.println("finally block");
			return 2;	//return from finally block
		}
	}

 输出的是:

try block
finally block
2 try 中 有 return,finally中没有return。执行完finally中的语句之后,再执行try中的return。

public int test1() {
        try {
            System.out.println("try block");
            return 0;
        } catch (Exception e) {
            System.out.println("catch block");
            return 1;    // return from catch block
        } finally{
            System.out.println("finally block");
//            return 2;    //return from finally block
        }
    }

输出:

try block
finally block
0

执行完,finally中的语句之后,如果finaly中没有return,则到catch中寻找return子句,catch再没有的话,就要在往外寻找。

public int test1() {
        try {
            System.out.println("try block");
//            return 0;
            throw new Exception("a exception");
        } catch (Exception e) {
            System.out.println("catch block");
//            return 1;    // return from catch block
        } finally{
            System.out.println("finally block");
//            return 2;    //return from finally block
        }
        return 3;    // over test
    }
原文地址:https://www.cnblogs.com/OliverZhang/p/7224876.html