- try块中无异常:
- 执行顺序:先执行try块中的代码,然后执行finally块中的代码(如果有finally块),最后执行try - catch - finally块之后的代码。
- 示例代码:
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
System.out.println("Try block executed.");
} finally {
System.out.println("Finally block executed.");
}
System.out.println("Code after try - catch - finally block.");
}
}
Try block executed.
Finally block executed.
Code after try - catch - finally block.
- try块中有异常被catch捕获:
- 执行顺序:先执行try块中的代码,当异常发生时,try块中剩余未执行的代码将被跳过,然后执行与之匹配的catch块中的代码,最后执行finally块中的代码(如果有finally块),再执行try - catch - finally块之后的代码。
- 示例代码:
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
int num = 10 / 0;
System.out.println("This line won't be printed.");
} catch (ArithmeticException e) {
System.out.println("Caught ArithmeticException: " + e.getMessage());
} finally {
System.out.println("Finally block executed.");
}
System.out.println("Code after try - catch - finally block.");
}
}
Caught ArithmeticException: / by zero
Finally block executed.
Code after try - catch - finally block.
- try块中有异常未被catch捕获:
- 执行顺序:先执行try块中的代码,当异常发生时,try块中剩余未执行的代码将被跳过,由于没有匹配的catch块,异常将向上抛出(如果是在main方法中,程序将终止),但在异常抛出前会执行finally块中的代码(如果有finally块)。
- 示例代码:
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
int[] arr = new int[5];
System.out.println(arr[10]);
} finally {
System.out.println("Finally block executed.");
}
System.out.println("This line won't be printed.");
}
}
Finally block executed.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5
at TryCatchFinallyExample.main(TryCatchFinallyExample.java:6)