• try catch finally执行顺序 (return / 变量覆盖)


    finally有return 始终返回finally中的return 抛弃 try 与catch中的return

    情况1:try{} catch(){}finally{} return x;

    try{} catch(){}finally{} return x;
    1 ->	2	->	3	->	4
    

    情况2:try{ return x; }catch(){} finally{} return y;

    try{ return x; }catch(){} finally{} return y;
    try -> x计算[临时栈存]->finally ->return x的结果
    

    情况3:try{ } catch(){return x;} finally{} return y;

    try -> catch ->异常catch住 -> x计算[临时栈存]-> finally -> return x的结果;
    无异常 -> finally -> return y;
    

    情况4:try{ return x; }catch(){} finally{return y;}

    try -> x计算[临时栈存] ->finally ->return y
    

    情况5:try{} catch(){return x;}finally{return y;}

    try -> catch捕获 -> x计算[临时栈存] ->finally ->return y
    

    情况6:try{ return x;}catch(){return z;} finally{return y;}

    try->x计算[临时栈存]->异常catch捕获-> z计算[临时栈存]->finally->return y;
    无异常 -> finally -> return y;
    

    eg1:finally无返回

    int x = 1; try{x++; return x;} finally{++x;}
    x = 2 ;

    x计算后的值不会被finally改变
    进入finally会提前栈保存return x 计算的值

    try x:2
    finally x:3
    return x :2 == try x:2

    finally无返回

    eg2:finally带返回

    int x = 1; try{x++; return x;} finally{++x; return x;}
    x = 3 ;

    x计算后的值不会被finally改变
    进入finally会提前栈保存return x 计算的值
    但是直接返回finally计算完成已经被影响的x值

    try x:2
    finally x:3
    return x :3 == finally x:3

    finally带返回

  • 相关阅读:
    【python+selenium】selenium grid(分布式)
    【python】导入自定义模块
    Maven的配置以及IDEA导入本地Maven
    java历史概述
    JVM 内存调优 与 实际案例
    ConcurrentHashMap实现线程安全的原理
    Request.UrlReferrer详解
    等比例缩放生成缩略图
    JavaEE的ajax入门
    javaee三层架构案例--简单学生管理系统
  • 原文地址:https://www.cnblogs.com/Zzang/p/try_catch_finally.html
Copyright © 2020-2023  润新知