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.当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出 ...
随机推荐
- ADF_Data Binding系列1_使用Bean Data Control
2015-02-16 Created By BaoXinjian
- Linux下date命令,格式化输出,时间设置
date命令的帮助信息 [root@localhost source]# date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] ...
- springboot教程
http://www.cnblogs.com/java-zhao/tag/spring-boot/ http://blog.csdn.net/liaokailin/article/category/5 ...
- python_day3
一.set的基本操作 >>> s1=set("abc123abc") >>> s1 #把字符串转化为set,去重 set([']) >&g ...
- JAVA设计模式之门面模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口 ...
- CoolTrayIcon4.0
CoolTrayIcon:在任务栏放置图标的控件,是同类空间中功能最为完善和强大的. 1.支持动态图标 2.交互式气球样式的提示框 3.支持bitmaps到icons的转换 4.支持设计状态预览 5. ...
- (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出
(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安 ...
- 汉诺塔算法详解之C++
汉诺塔: 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆环,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置 ...
- Linux:安装图形界面
能连接网络的前提下,使用yum安装 yum groupinstall -y "Desktop"yum groupinstall -y "X Window Syste ...
- windows无提示关闭页面
今天碰到个问题,需要自动关闭网页,网上找了方法,一直在火狐测试,一直没反应,还以为写错了,后来发现用火狐需要进行设置(后文有提供方法),IE可正常使用... 下面提供部分代码: 需要自动关闭网页,可以 ...