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正确返回了,就不会执行。
            }
  • 相关阅读:
    javascript性能
    图片及js的预加载
    url参数解析
    javascript预编译
    13、MVC 设计思想
    12、JDBC 流程
    线程-2、sleep() 、join()、yield()有什么区别
    线程-1、创建线程的方式及实现
    集合-7、HashMap实现原理及源码分析
    集合-6、HashSet 和 HashMap 区别
  • 原文地址:https://www.cnblogs.com/imust2008/p/5611916.html
Copyright © 2011-2022 走看看