finally块的执行

来源:互联网 发布:四维星窗帘设计软件 编辑:程序博客网 时间:2024/05/16 13:40


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() finally3

当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() finally2

程序在执行到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;}}

执行结果

233

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 zeroat 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块中的代码。