• try-catch-finally对返回值的影响


    catch 和 finally 一起使用的常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。

     finally 块用于清理try块分配的任何资源,无论try中是否异常或者终止(return),finally块都会执行

    如果在finally块中修改了返回值,会对最终返回的结果有何影响呢?

    1,如果返回值是值类型

    //finally执行,i值是2013,但是最终返回2015
    static int test()
            {
                int i = 2016;
                try
                {
                   i=2015;
                   return i;
                }
                catch
                {
                   //有异常才会到这里
                   i=2014;
    return i; }
    finally { i=2013; } }

    2,返回string类型,是否会影响呢,答案是不会影响。

    //finally块执行,s值是“tiger”,但是最终返回dog
    static string test()
            {
                string s = "cat";
                try
                {
                   s="dog";
                   return s;
                }
                catch
                {

               //有异常才会到这里
                s="duck";
                 return s;

                }
                finally
                {
                    s="tiger";
                }
               
            }

    3,返回数组又会如何呢?

    //finally块执行,影响了最终返回结果,返回{ "e", "b", "c" };
    static string[] test()
            {
                string[] arr = { "a", "b", "c" };
                try
                {
                   arr[0]="d";
                   return arr;
                }
                catch
                {
                   //有异常才会到这里
                   arr[0]="f";
    return arr; }
    finally { arr[0]="e";; } }

    4,对象跟数组一样,finally修改对象后,最终返回的是finally修改后的对象。

    注意:

    1,finally块中不能有 return语句,当然vs会报错。

    2,如果finally块之后还有return语句,该如何返回呢?即 try{ }catch(){} finally{} return x;

    finally块肯定执行,这里主要看try和catch是否执行了return语句,如果执行了,finally块后面的语句就不执行了。

    当然,如果try和catch块都含有return语句,那么肯定会执行其中一个,finally块后面的的语句就不会执行了,这是vs会提示“检测到无法访问的代码”,

    示例

    //返回“dog”,加入有异常会返回“duck”,
    static string test()
            {
                string s = "cat";
                try
                {
                   s="dog";
                   return s;
                }
                catch
                {
               //有异常才会到这里
                s="duck";
                 
    
                }
                finally
                {
                    s="tiger";
                }
                
                return s;//假如try正确返回了,就不会执行。
            }
  • 相关阅读:
    ApplicationContext之getBean方法详解
    Windows10终端优化方案:Ubuntu子系统+cmder+oh-my-zsh
    向 Windows 高级用户进阶,这 10 款效率工具帮你开路 | 新手问号
    Ditto —— windows 剪贴板增强小工具(复制粘贴多条记录)
    Service Mesh服务网格:是什么和为什么
    正确理解Spring事务和数据库事务和锁
    Spring中@Transactional事务回滚(含实例详细讲解,附源码)
    五分钟搞清楚MySQL事务隔离级别
    事务并发的问题场景图解
    Spring的事务管理和数据库事务相关知识
  • 原文地址:https://www.cnblogs.com/imust2008/p/5611916.html
Copyright © 2020-2023  润新知