zoukankan      html  css  js  c++  java
  • 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正确返回了,就不会执行。
            }
  • 相关阅读:
    ios开发之多线程---GCD
    三:新浪微博--主框架的搭建
    二:新浪微博:第三方框架管理工具CocoaPods的安装和使用
    PHP Fatal Error: call to undefined function mysql_connect() [duplicate]
    ZooKeeper 3.4.5 分布式环境搭建详解
    coreLocation说明,作者写的很用心,收藏
    动画设置参数,有数值,收藏了
    Java 设计模式——组合模式
    NSURL基本操作示例说明
    关于应用程序启动,你可能不知道的东西
  • 原文地址:https://www.cnblogs.com/imust2008/p/5611916.html
Copyright © 2011-2022 走看看