try catch finallyの実行順序についての疑問

1252 ワード

public class TryCatchOrder {
	public static void main(String[] args) {
		System.out.println(new TryCatchOrder().test());
	}
	static int i = 0;
	public int test() {
		try {
			System.out.println(" !");
			throw new Exception();
		} catch (Exception e) {
			System.out.println(" catch !");
			return ++i;
			
		} finally {
			System.out.println(" finally !");
			++i;
		}
	}
}

出力:1
 
 
public class TryCatchOrder {
	public static void main(String[] args) {
		System.out.println(new TryCatchOrder().test());
	}
	static int i = 0;
	public int test() {
		try {
			System.out.println(" !");
			throw new Exception();
		} catch (Exception e) {
			System.out.println(" catch !");
			return ++i;
			
		} finally {
			System.out.println(" finally !");
			return ++i;
		}
	}
}

 
出力:2
 
デバッグした結果、最初の例の実行順序はcatch--finally--catch、2番目の例の実行順序はcatch--finallyであることがわかりました.
なぜ最初の例の出力が1なのか、まだ少し分かりません.