天天看點

java異常語句中catch,finally的執行順序

在使用MyEclipse程式設計時,我發現一個問題:如下代碼,當出現異常時,有時候會先執行catch裡的語句,而有時候會先執行finally裡的語句:

public class Calc {
	public int divide(int a, int b) throws Exception {
		if (b == 0) {
			throw new Exception("出現錯誤:被除數和除數必須是整數,除數不能為零。");
		}
		return a / b;
	}
}
           
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Calc c = new Calc();

		System.out.print("請輸入被除數:");
		int a = sc.nextInt();
		System.out.print("請輸入除數:");
		int b = sc.nextInt();

		try {
			System.out.println(c.divide(a, b));
		} catch (Exception e) {
			System.err.println(e.getMessage());
		} finally {
			System.out.println("感謝使用本程式!");
		}
	}
}
           

此例先執行了finally後面語句的内容:

java異常語句中catch,finally的執行順序

而這一次先執行了catch裡面的内容:

java異常語句中catch,finally的執行順序

後來我把程式拿出來放在CMD指令行中運作,試了很多遍,都是先執行的catch,也就是從上到下順序執行,不知道是不是MyEclipse的問題。(其他的版本我不清楚,我用的是2014版)