很多人都会纠结这么一个问题try-catch-finally中有return的情况,我自己总结如下:

如果是值类型的话

请看代码

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

 namespace 含有return的测试
 {
     class Program
     {
         static void Main(string[] args)
         {
             int j = Test();
             Console.WriteLine(j);

         }
         /// <summary>
         /// 这个是测试return里面的是值类型就不会对他们有影响呢
         /// </summary>
         /// <returns></returns>
         static int Test()
         {
              ;

             try
             {

                 return i; //为什么这里要加个return呢
             }
             catch (Exception)
             {

                 i++;
                 return i;

             }
             finally
             {
                 i = i + ;
             }

         }

     }
 }

通过上面的代码可以看出,这里的finally执行了之后,对return返回没有影响 return返回结果还是0;

以下是返回值是引用类型

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

 namespace 引用类型测试
 {
     class Program
     {
         static void Main(string[] args)
         {
             List<string> strList = Test();
              foreach (var i in strList)
             {
                 Console.WriteLine(i);
             }
             Console.ReadKey();
         }
         private static List<string> Test()
         {
             List<string> strList = new List<string>();
             strList.Add("aa");
             strList.Add("bb");
             strList.Add("cc");
             try
             {
                 //这里没有发生异常的
                 strList.Add("trytry");
                 return strList;
             }
             catch (Exception ex)
             {
                 strList.Add("zzz");
                 return strList;
             }
             finally
             {
                 strList.Add("yyy");
             }
         }  

     }
 }

输出结果如下:

通过以上两个例子可以总结出来如果是值类型的话,finally里面的改变不会对try或者catch中的return返回值造成影响。

如果是引用类型的话,finally里面的改变会对try或者catch中的return返回值造成影响。

至于为什么会出现这个结果: 我还在思考中,欢迎大家讨论

 

try-catch-finally的含有return使用揭秘的更多相关文章

  1. 【转】Java中try catch finally语句中含有return语句的执行情况(总结版)

    Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有r ...

  2. Java中try catch finally语句中含有return语句的执行情况(总结版)

    在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...

  3. Java中try catch finally语句中含有return语句的执行情况

    finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面 ...

  4. try catch finally中的return

    try catch 中finally语句总是可以执行的,不管try中是否含有return语句 public class TestReturn { public static void main(Str ...

  5. JVM关键字try、catch、finally、return执行过程

    关键字:jvm try catch finally return.指令 finally相当于在所有方法返回之前执行一次 finally中含有return其中finally中return会覆盖try和c ...

  6. Java异常处理中finally中的return会覆盖catch语句中的return语句

    Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...

  7. try、catch、finally与return

    1 try catch finally语句基础知识 finally一定会被执行. try块发生异常才会执行catch块. 如果finally块中抛出异常,则整个try.catch.finally块中抛 ...

  8. try..catch..finally执行顺序return

    try..catch..finally这个语法大家都很熟悉,就是捕捉异常.处理异常,面试中经常被问到的一个问题是:如果在try...catch中的某某地方return了,那么之后的某某步骤还会不会执行 ...

  9. throw和throws的区别以及try,catch,finally在有return的情况下执行的顺序

    一,抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常.下面它们之间的异同. (1).系统自动抛异常 1.当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出 ...

随机推荐

  1. String字符串

    主要来源:http://www.cnblogs.com/devinzhang/archive/2012/01/25/2329463.html http://blog.csdn.net/qh_java/ ...

  2. (gridcontrol等)通用导出excel z

    关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,并且解决DevExpress控件自带的方法存在的缺陷问题 1.解决GridControl自带方法不能导出图片: ...

  3. 随笔3- list array

    今天看到了一段代码 使用 数组去初始化赋值给list,就是把指针的首地址和end地址的下一位传递给list,把内存中这段长度copy到list中, 回忆起以前看到的一个资料 摘自C++ Primer ...

  4. PHP发送邮件的两种方式

    1.用SMTP方式发送邮件.引入phpmailer文件包,然后在文件中 <?php require_once("phpmailer/class.phpmailer.php") ...

  5. cocos2dx音乐与音效

    // 预加载音乐和音效 SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(CCFileUtils::sharedFileUtil ...

  6. 剑指Offer:面试题23——从上往下打印二叉树(java实现)

    问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...

  7. js获取节点的DOM操作

    一直感觉DOM节点什么的乱七八糟的不能理解,可能博客也没办法写清楚,只能把知道的一些信息大致写下来慢慢再补充了. HTML DOM类型 Node类型 Javascript中的所有节点类型都继承自Nod ...

  8. Shell_参数替换(転)

    From: http://www.cnblogs.com/yjf512/archive/2013/06/03/3114803.html Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值 ...

  9. PHP中,文件上传实例

    PHP中,文件上传一般是通过move_uploaded_file()来实现的.  bool move_uploaded_file ( string filename, string destinati ...

  10. PS 制作复印件及盖章效果

    对要处理的部分选定  1.执行 滤镜--杂色--添加杂色 2.执行 滤镜--模糊--高斯模糊 3.ctrl+L 执行 色阶 调整为 满意的效果  4.最后添加想要的颜色 图像--调整--渐变映射 关键 ...