finally块的执行


1、try和finally块中都有return

public static void main(String[] args) {
		System.out.println(m1());
	}

	static int m1() {
		try {
			return 1;
		} catch (Exception e) {
			return 2;
		} finally {
			System.out.println("m1() finally");
			return 3;
		}
	}


返回结果

m1() finally
3

当finally块中return语句时,将会覆盖其他语句块的return。


2、finally块中没有return

public static void main(String[] args) {
		System.out.println(m2());
	}

	static int m2() {
		int result = 1;
		try {
			result = 2;
			return result;
		} catch (Exception e) {
			return 0;
		} finally {
			result = 3;
			System.out.println("m2() finally");
		}
	}

运行结果

m2() finally
2

程序在执行到return时首先将返回值存储在一个指定的位置,其次去执行finally块,finalyy块对值的修改不起作用。返回之前缓存的值。


3、try块异常

public static void main(String[] args) {
		System.out.println(m3());
	}

	static int m3() {
		try {
			int i = 5 / 0;
			System.out.println("1");
			return i;
		} catch (Exception e) {
			System.out.println("2");
			return 2;
		} finally {
			System.out.println("3");
			return 3;
		}
	}

执行结果

2
3
3

4、try块之前异常,finally不执行

public static void main(String[] args) {
		System.out.println(m4());
	}

	static int m4() {
		int i = 10 / 0;
		try {
			System.out.println("1");
			return i;
		} catch (Exception e) {
			System.out.println("2");
			return 2;
		} finally {
			System.out.println("3");
			return 3;
		}
	}

执行结果

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at TestString.m3(TestString.java:16)
	at TestString.main(TestString.java:12)

如果在try语句块之前报错,就直接报错。


5、try块中有System.exit(0)

public static void main(String[] args) {
		System.out.println(m5());
	}

	static int m5() {
		try {
			System.out.println("1");
			System.exit(0);
			return 1;
		} catch (Exception e) {
			System.out.println("2");
			return 2;
		} finally {
			System.out.println("3");
			return 3;
		}
	}

运行结果:

1

当程序在try块中System.exit(0),强制退出时也不会去执行finally块中的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值