finally学習ノート

1488 ワード



public class TestFinally {
	public static void main(String args[]){
		
		System.out.println(new TestFinally().test());
	}
	
	static int test(){
		int x=1;
		try{
			return x;
		}finally{
			++x;
		}
	}
}



public class TestFinally1 {
	public static void main(String args[]){
		TestFinally1 t=new TestFinally1();
		int b=t.get();
		System.out.println(b);
	}
	public int get(){
		try{
			return 1;
		}
		finally{
			return 2;
		}
		
		
	}
}


tryのreturn文呼び出し関数はfinallyで呼び出された関数より先に実行され、すなわちreturn文が先に実行され、finally文が後に実行される.Returnは、関数をすぐに返すのではなく、return文が実行されると、戻り結果が関数スタックに配置されます.このとき、関数はすぐに戻るのではなく、finally文を実行してから戻ります.


public class FinallyTest2 {
	public static void main(String args[]){
		
		System.out.println(new FinallyTest2().test());
	}
	
	int test(){
		try{
			
			return func1();
		}
		finally{
			return func2();
		}
		
		
	}
	int func1(){
		System.out.println("func1");
		return 1;
	}
	int func2(){
		
		System.out.println("func2");
		return 2;
		
	}
}


結論:finallyのコードはreturnとbreak文より後に実行されます.