try-catch-finally実行順序まとめ

3475 ワード

1、異常がない場合、tryの戻り値を一時領域に保存してからfinallyを実行します.このfinallyには戻り値があります.この戻り値は、前のtryの一時領域に保存した値を戻りのこの値で置き換え、この一時領域の値を前のレベルのメソッドに戻します.
2、異常がある場合、catchのコードを実行し、ここのreturnは戻り値を一時領域に戻し、finallyを実行します.このfinallyには戻り値があります.これにより、catchに一時領域が存在する値をこのfinallyが返した値に置き換え、この一時領域の値を前のレベルのメソッドに戻します.

public class FileSystemTest{

    public static void main(String[] args) {

        System.out.println("test= "+test());

        System.out.println("finish= ");

    }

    private static int test() {

        int b =20;

        try{

            System.out.println("try");

            return b+=1;

            //case3

            //return 1;

        }catch(Exception e){

            System.out.println("catch");

            return 0;

        }finally{

            System.out.println("finally");

            System.out.println("b= "+b);

            b++;

            //case1

            //return b;


            //case2

            //return 10;

        }
    }
}

 
結果:
正常な動作の場合test=21
case1: test =22
case2:test =10
case3:test =1