try catch finally 代码块执行顺序问题

try catch 经常用,但是对于一些特殊情况没有写代码测试过,今天来试一试。

1.正常情况

结论:代码按照顺序执行,没有特殊情况。

public static void main(String[] args) throws UnknownHostException {
    Integer ff = testFinally();
    System.out.println("ff:"+ff);
}
static Integer testFinally(){
    Integer integer = new Integer("123");
    try {
        integer = new Integer("124");
        System.out.println("1:"+integer);
        return integer;
    } catch (Exception e){
        integer = new Integer("125");
        System.out.println("2:"+integer);
        //return integer;
    } finally {
        integer = 126;
        System.out.println("3:"+integer);
        //return integer;
    }
    integer = new Integer("127");
    return integer;
}

            

2.finally中有 return语句

结论:finally之后就不可以写代码了,但是依然没有什么特殊情况。

static Integer testFinally(){
    Integer integer = new Integer("123");
    try {
        integer = 124;
        System.out.println("1:"+integer);
        //return integer;
    } catch (Exception e){
        integer = 125;
        System.out.println("2:"+integer);
        //return integer;
    } finally {
        integer = 126;
        System.out.println("3:"+integer);
        return integer;
    }
    //integer = 127;
    //return integer;
}

  

 

3.try 或 catch中有renturn语句

结论:在return之前会先执行finally内的语句,但是对于return要返回的对象,finally中修改的结果并不会被返回,而是返回finally执行之前的结果。

           即使finally中也有return语句,也是返回try中return的结果。

public static void main(String[] args) throws UnknownHostException {
    Integer ff = testFinally();
    System.out.println("ff:"+ff);
}
static Integer testFinally(){
    Integer integer = new Integer("123");
    try {
        integer = 124;
        System.out.println("1:"+integer);
        return integer;
    } catch (Exception e){
        integer = 125;
        System.out.println("2:"+integer);
        //return integer;
    } finally {
        integer = 126;
        System.out.println("3:"+integer);
        //return integer;
    }
    integer = 127;
    return integer;
}

   

总结:如果遇到需要再try中return的情况,finally就不要修改返回值了,因为在返回值中不会生效。

           finally一般都是用来关闭资源和一些必须做的收尾,而不是逻辑代码。

自己写的测试代码和一些理解,如果有错误,希望在评论区指正,我会把错误的地方改掉。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值