return在try-catch-finally语句中的使用

若在 try或catch语句里面有return语句,finally语句和return语句的执行顺序问题:

若有finally语句,则无论如何,都会执行该语句,在try或catch中的return语句会将它的返回值压入栈内,然后执行finally语句,当finally执行完成后,若finally语句里有return语句,则执行return语句并结束。若finally没有return语句,则返回被保存的栈里的return语句并结束。然而,在压栈时候,要注意压入栈内的是什么东西,是值本身还是引用,若是引用则引用的值会改变,若是变量值,则不会改变。

public class TestFinal {

    public static void main(String[] args) {

        System.out.println("test1:"+testFinal1());

        System.out.println("test2:"+testFinal2());

        System.out.println("test3:"+testFinal3());

        System.out.println("test4:"+testFinal4());

    }

    static int testFinal1(){

        int i = 1;

        try{

            return i;       //将其压入栈,执行finally,压入栈内是变量值,i 不会改变

        }

        finally{

            System.out.println("in testFinal1():finally 肯定会被执行的!");

            i = 48;

        }

    }

    static String testFinal2(){

        String str = "try";

        try{

            return str;    //将其压入栈,执行finally,压入栈内是变量值,str 不会改变

        }

        finally{

            System.out.println("in testFinal2():finally 肯定会被执行的!");

            str = "finally";

        }

    }

    static StringBuilder testFinal3(){

        StringBuilder build = new StringBuilder("try ");

        try{

            return build;   //将其压入栈,执行finally,压入栈内是引用,build值改变

        }

        finally{

            System.out.println("in testFinal3():finally 肯定会被执行的!");

            build.append("finally");     //改变了对象的值

            build = new StringBuilder("你猜我是谁!");  //另一个对象

        }

    }

    static String testFinal4(){

        try{

            return "return in try";

        }

        finally{

            System.out.println("in testFinal4():finally 肯定会被执行的!");

            return "return in finally";          //若fianlly中有ruturn,直接返回

        }

    }

}


输出是:

in testFinal1():finally 肯定会被执行的!

test1:1

in testFinal2():finally 肯定会被执行的!

test2:try

in testFinal3():finally 肯定会被执行的!

test3:try finally

in testFinal4():finally 肯定会被执行的!

test4:return in finally


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值