案例一如下:
int[] num = { 1, 2, 3 };
System.out.println(num[3]);
try {
System.out.println("try 代码块被执行!");
return 0;
} catch (Exception e) {
System.out.println("catch 代码块被执行!");
return 0;
} finally {
System.out.println("finally 代码块被执行!");
执行结果为:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at com.test.MyTest.myMethod(MyTest.java:15)
at com.test.MyTest.main(MyTest.java:7)
==============
案例二如下:
在进入try-catch语句块之前,方法就已经return了的话,finally也不执行
System.exit(0);
=======================
如果在finally中操作了变量,但是没有return语句保存结果的话,最终还是以try里面的变量和return语句为主
package com.test;
public class MyTest {
public static void main(String[] args) {
System.out.println("main 代码块中的执行结果为:" + myMethod());
}
public static int myMethod() {
int i = 1;
try {
System.out.println("try 代码块被执行!");
return i;
} finally {
++i;
System.out.println("finally 代码块被执行!");
System.out.println("finally 代码块中的i = " + i);
}
}
}
执行结果为:
try 代码块被执行!
finally 代码块被执行!
finally 代码块中的i = 2
main 代码块中的执行结果为:1
原文:https://www.cnblogs.com/zyk98/p/14643482.html