zoukankan      html  css  js  c++  java
  • java try catch finally记录

     try catch finally

    1、返回值问题

        public static int getNum() {
            int ret = 0;
            try {
                ret = 1;
                return ret;
            } finally {
                ret = 2;
            }
        }
    结果:1
    结果分析:return ret;语句ret值1被缓存,然后在执行finally代码块,再return缓存的值1

     2、finally 代码块中有return

    public static int getNum() {
            int ret = 0;
            try {
                ret = 1;
                return ret;
            } finally {
                ret = 2;
                return ret;
            }
        }
    结果:2
    结果分析:finally代码块中的return执行完后会直接退出方法,不会再执行try代码快中的return,或者catch代码块中的return,
    也会吃掉try或者catch代码快中发生的异常;
    
    

    2、finally 代码块中发生异常

    public static int getNum2() {
            int ret = 0;
            try {
                ret = 1;
                int r = 1 / 0;
                return ret;
            } catch (Exception e) {
                ret = 3;
                throw new RuntimeException("catch");
            } finally {
                ret = 2;
                throw new RuntimeException("finally");
            }
        }
    结果: java.lang.RuntimeException: finally
    原因分析:

    finally代码块的优先级最高
    ,finally代码块中发生异常,会直接退出方法,对外暴露异常,并且会导致try或者catch代码快中发生的异常被吃掉,调用者感觉不到catch中发生的异常; 同样finally中有return语句,也会吃掉try或者catch代码快中发生的异常; 因此良好的代码风格是:
    1、finally代码块中不要写return语句 2、finally代码块中的代码要用try{}catch(){}处理掉,保证finally代码块中不要有异常出现

    其他人总结:

    https://blog.csdn.net/mxd446814583/article/details/80355572

    https://www.cnblogs.com/plokmju/

  • 相关阅读:
    链路追踪
    Zuul网关
    MyBatis批量插入
    自定义组件使用v-model
    正则表达式入门
    博客园主题1【备份】
    关于我
    input输入框内容规范正则总结
    实例003:完全平方数
    python基础day5dict
  • 原文地址:https://www.cnblogs.com/ccgblog/p/10282512.html
Copyright © 2011-2022 走看看