zoukankan      html  css  js  c++  java
  • Java的finally语句在try或catch中的return语句执行之后还是之前?

    import java.util.HashMap;
    import java.util.Map;
    
    public class FinallyDemo1 {
        
        public static void main(String[] args) {
            System.out.println("=================================");
            System.out.println("A情况:finally在try的return执行之后,返回之前。");
            System.out.println("main	i="+test1());
            System.out.println("=================================");
            System.out.println("B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:");
            System.out.println("main	i="+test2());
            System.out.println("=================================");
            System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:");
            System.out.println("main	i="+test3());
            System.out.println("=================================");
            System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:");
            System.out.println("main	i="+test4());
            System.out.println("=================================");
            System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
            System.out.println("main	map="+test5());
            System.out.println("=================================");
            System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
            System.out.println("main	map="+test6());
            System.out.println("=================================");
        }
        
        /**
         * finally代码块是在try代码块中的return语句执行之后,返回之前执行的。
         * @return
         */
        public static int test1(){
            int i=1;
            try {
                return i+=100;
            } catch (Exception e) {
                System.out.println("catch");
            }finally{
                i++;
                System.out.println("finally	i="+i);
                
            }
            return i;
        }
        
        /**
         * finally代码块中的return语句覆盖try代码块中的return语句
         * @return
         */
        @SuppressWarnings("finally")
        public static int test2(){
            int i=1;
            try {
                return i+=100;
            } catch (Exception e) {
                System.out.println("catch");
            }finally{
                i++;
                System.out.println("finally	i="+i);
                return i;
            }
        }
        
        /**
         *  try代码块中的return语句在异常的情况下不会被执行;
         *  catch中的return执行情况与未发生异常时try中return的执行情况完全一样。
         * @return
         */
        @SuppressWarnings("finally")
        public static int test3(){
            int i=1;
            try {
                i=i/0;
                return i+=100;
            } catch (Exception e) {
                System.out.println("catch");
                return i+=100;
            }finally{
                i++;
                System.out.println("finally	i="+i);
            }
        }
        
        @SuppressWarnings("finally")
        public static int test4(){
            int i=1;
            try {
                i=i/0;
                return i+=100;
            } catch (Exception e) {
                System.out.println("catch");
                return i+=100;
            }finally{
                i++;
                System.out.println("finally	i="+i);
                return i;
            }
            
        }
        
        /**
         * 值传递:返回值不变
         * 地址传递:返回值会变
         * @return
         */
        public static Map test5(){
            Map<String, String> map = new HashMap<String, String>();
            map.put("param1", "初始化值");
            try {
                System.out.println("try");
                map.put("param1", "try值");
                return map;
            } catch (Exception e) {
                System.out.println("catch");
                map.put("param1", "catch值");
            } finally {
                System.out.println("finally");
                map.put("param1", "finally值");
                map = null;
            }
            return map;
        }
        
        @SuppressWarnings("finally")
        public static Map test6(){
            Map<String, String> map = new HashMap<String, String>();
            map.put("param1", "初始化值");
            try {
                System.out.println("try");
                map.put("param1", "try值");
                return map;
            } catch (Exception e) {
                System.out.println("catch");
                map.put("param1", "catch值");
            } finally {
                System.out.println("finally");
                map.put("param1", "finally值");
                map = null;
                return map;
            }
            
        }
    
    }

     控制台:

    =================================
    A情况:finally在try的return执行之后,返回之前。
    finally i=102
    main i=101
    =================================
    B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:
    finally i=102
    main i=102
    =================================
    异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:
    catch
    finally i=102
    main i=101
    =================================
    异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:
    catch
    finally i=102
    main i=102
    =================================
    地址传递的参数,在try-finally中将覆盖返回值。
    try
    finally
    main map={param1=finally值}
    =================================
    地址传递的参数,在try-finally中将覆盖返回值。
    try
    finally
    main map=null
    =================================

  • 相关阅读:
    爬虫的基本原理、requests模块、模拟登陆网站、爬取视频网站、cookie池和代理池、正向代理和反向代理
    git初识、
    签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件
    频率认证源码分析、自定义频率认证组件、JWT认证、drf-jwt插件
    auth组件的权限六表 自定义User的权限六表 六表之间的数据访问 三大认证整体源码分析 自定义认证类 系统权限类 自定义权限类
    视图类与序列化类传参、二次封装response类、视图家族、GenericAPIView视图基类、mixins视图6大工具类、generic中的工具视图、视图集、GenericAPIView 与 APIView 作为两大继承视图的区别、工具视图集、路由组件(了解)
    修改文件后缀
    python统计自己微信好友并抓取信息
    关于今日头条小程序(字节跳动小程序)相关问题
    关于飞鱼文档不详细无法拉取数据问题
  • 原文地址:https://www.cnblogs.com/xmqa/p/9116946.html
Copyright © 2011-2022 走看看