很多人都会纠结这么一个问题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. ADF_Database Develop系列2_设计数据库表之Table Partitions/Create Users/Generate DDL

    2013-05-01 Created By BaoXinjian

  2. css实现绝对定位元素居中

    前端我们时常需要封装一些弹出框,这些弹出框大小都不能确定,多半是用js实现居中. 现在有了css3可以不用js了. .box{ background-color: blueviolet; width: ...

  3. css学习笔记(8)

    1.元素使用了float以后就脱离了文档流,不能通过margin:0 auto;来居中了. 2.position:relative;定位后可以通过margin:0 auto;来居中,也说明了relat ...

  4. [IIS]在CMD中IIS的使用

    一.打开IIS管理器1,win+r,打开"运行" 2,输入 InetMgr,就打开了IIS管理器 二.IIS其他相关命令iisreset /RESTART 停止后启动 iisres ...

  5. logging日志模块

    为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...

  6. 【转】Java日期计算之Joda-Time

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. http:// ...

  7. guava cache

    适用场景 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存. Guava Cache与ConcurrentMap很相似,但 ...

  8. MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询

    MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别.例如用Document替换BasicDBObject.通过Builders类构建Bson替代直接输入$命令等 ...

  9. SQL 中 SELECT 语句的执行顺序

    好像自已在书写 SQL 语句时由于不清楚各个关键字的执行顺序, 往往组织的 SQL 语句缺少很好的逻辑, 凭感觉 "拼凑" ( 不好意思, 如果您的 SQL 语句也经常 " ...

  10. anomaly detection algorithm

    anomaly detection algorithm 以上就是异常监测算法流程