try-catch-finally的含有return使用揭秘
很多人都会纠结这么一个问题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使用揭秘的更多相关文章
- 【转】Java中try catch finally语句中含有return语句的执行情况(总结版)
Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有r ...
- Java中try catch finally语句中含有return语句的执行情况(总结版)
在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...
- Java中try catch finally语句中含有return语句的执行情况
finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面 ...
- try catch finally中的return
try catch 中finally语句总是可以执行的,不管try中是否含有return语句 public class TestReturn { public static void main(Str ...
- JVM关键字try、catch、finally、return执行过程
关键字:jvm try catch finally return.指令 finally相当于在所有方法返回之前执行一次 finally中含有return其中finally中return会覆盖try和c ...
- Java异常处理中finally中的return会覆盖catch语句中的return语句
Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...
- try、catch、finally与return
1 try catch finally语句基础知识 finally一定会被执行. try块发生异常才会执行catch块. 如果finally块中抛出异常,则整个try.catch.finally块中抛 ...
- try..catch..finally执行顺序return
try..catch..finally这个语法大家都很熟悉,就是捕捉异常.处理异常,面试中经常被问到的一个问题是:如果在try...catch中的某某地方return了,那么之后的某某步骤还会不会执行 ...
- throw和throws的区别以及try,catch,finally在有return的情况下执行的顺序
一,抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常.下面它们之间的异同. (1).系统自动抛异常 1.当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出 ...
随机推荐
- python标准库xml.etree.ElementTree的bug
使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...
- sudo执行脚本找不到环境变量
sudo执行脚本找不到变量 问题 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能 ...
- error BK1506 : cannot open file '.\Debug\????????.sbr': No such file or dire
http://blog.csdn.net/shuilan0066/article/details/8738035 分类: 调试错误信息2013-03-29 19:08492人阅读 ...
- 如何修改SharePoint列表条数等阈值
若要修改SharePoint中对列表最大条数等设定的阈值,可按如下步骤操作: 1. 打开页面:管理中心 > 应用程序管理 > 管理Web应用程序.2. 选择要修改阈值的Web应用程序,并在 ...
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...
- 使用maven创建web项目
eclipse 4.5.2中集成了maven,所以我们不用再去安装插件啦. 点击file->new->other->maven->maven project 选择了worksp ...
- git 放弃本地修改 强制更新
git reset --hard origin/master
- 1.No MBR错误
如果提示如下错误: Error: No MBR is found at SD/MMC. Hint: use f ...
- MVC 為頁面的list資料重新命名
function ReBookFileName() { $("#div_sortable").find("li[ ...
- linux查看访问windows共享目录NT_STATUS_DUPLICATE_NAME问题解决
linux查看访问windows共享目录NT_STATUS_DUPLICATE_NAME问题解决 [jason@superfreak ~]$ smbclient //powerhouse-smb.my ...