try catch finally执行顺序测试

结论:

常量类型 finally 中没有 renturn 不会影响返回值.  finally 中有 renturn 会影响返回值.

可见引用类型时finally有没有return都会对当前方法的返回值产生影响.

================================================

1. finally 中没有return


public class Main {
    private  static  int a=2;

    public static void main(String[] args) {

        System.out.println("test输出的结果 "+test());
        System.out.println("main 自加后 a="+(a++));


    }
    private  static  int test(){
        try {
            a+=3;
            System.out.println("try  a="+a);
            return a;
        }catch (Exception e){

        }finally {
            ++a;
            System.out.println("finally a="+a);
        }
        return 0;

    }
}



==============================================
try  a=5
finally a=6
test输出的结果 5
main 自加后 a=6

结果: 

       执行顺序   try => finally =>  main 

        在finally中并不会影响返回值
 

2.finally 中有 return 

  private  static  int test(){
        try {
            a+=3;
            System.out.println("try  a="+a);
            return a;
        }catch (Exception e){

        }finally {
            ++a;
            System.out.println("finally a="+a);
            return a ;
        }

    }

=================================================
try  a=5
finally a=6
test输出的结果 6
main 自加后 a=6

结果: 

       执行顺序   try => finally =>  main 

        在finally中会屏蔽方法返回值
 

3. 引用变量 finally 中没有 return


    private  static List<String> list=new ArrayList<>();

    public static void main(String[] args) {


        System.out.println("test输出的结果 "+test());
        System.out.println("main list="+list.toString());


    }
    private  static  List test(){
        try {
            list.add("33");
            System.out.println("try  list="+list.toString());
            return list;
        }catch (Exception e){

        }finally {
            list.add("66");
            System.out.println("finally list="+list.toString());
        }
        return null;
    }

================================================
try  list=[33]
finally list=[33, 66]
test输出的结果 [33, 66]
main list=[33, 66]

结果: 

       执行顺序   try => finally =>  main 

        在finally中会添加值. 

3. 引用变量 finally 中没有 return

    private  static List<String> list=new ArrayList<>();

    public static void main(String[] args) {


        System.out.println("test输出的结果 "+test());
        System.out.println("main list="+list.toString());


    }
    private  static  List test(){
        try {
            list.add("33");
            System.out.println("try  list="+list.toString());
            return list;
        }catch (Exception e){

        }finally {
            list.add("66");
            System.out.println("finally list="+list.toString());
            return list;
        }

    }


    private  static  int test02(){
        try {
            a+=3;
            System.out.println("try  a="+a);
            return a;
        }catch (Exception e){

        }finally {
            ++a;
            System.out.println("finally a="+a);
            return a ;
        }

    }


================================================
try  list=[33]
finally list=[33, 66]
test输出的结果 [33, 66]
main list=[33, 66]

结果: 

       执行顺序   try => finally =>  main 

        在finally中会添加值. 


 

发布了336 篇原创文章 · 获赞 846 · 访问量 41万+

猜你喜欢

转载自blog.csdn.net/zhanglong_4444/article/details/104796796