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文より後に実行されます.