try-catch-finally对返回值的影响
catch 和 finally 一起使用的常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。
finally 块用于清理try块分配的任何资源,无论try中是否异常或者终止(return),finally块都会执行。
如果在finally块中修改了返回值,会对最终返回的结果有何影响呢?
1,如果返回值是值类型
//finally执行,i值是2013,但是最终返回2015
static int test()
{
int i = ;
try
{
i=;
return i;
}
catch
{
//有异常才会到这里
i=2014;
return i;
}
finally
{
i=;
} }
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[]="d";
return arr;
}
catch
{
//有异常才会到这里
arr[0]="f";
return arr;
}
finally
{
arr[]="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正确返回了,就不会执行。
}
try-catch-finally对返回值的影响的更多相关文章
- 字节码分析finally块对return返回值的影响
直接进入主题.看如下代码: public int test(){ int i=0; try { i=1; return i; } catch (Exception e) { i=2; return i ...
- Go 初体验 - 令人惊叹的语法 - defer.4 - defer 对宿主函数返回值的影响
defer 函数可以影响宿主函数的返回值 看代码: 调用: 输出: 结果又让人意外了. coo1:因为传引用,return 时 i = 100, return 返回的也是 100,return 执行之 ...
- ThinkPHP中数据库操作返回值总结
转自:http://www.baiwar.com/post/thinkphp-database-operations-in-the-return-value.html Thinkphp中的Think\ ...
- ExecuteNonQuery()返回值
查询某个表中是否有数据的时候,我用了ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否.结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解, ...
- 【转】ThinkPHP中数据库操作返回值总结
Thinkphp中的Think\Model类提供了数据库的基本CURD(Create.Update.Read及Delete),通过该类可以很便捷的进行操作.Model类及扩展类主要的方法有: Crea ...
- mybatis 中的 update 返回值
摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...
- js onclick="return test()"事件返回值,对有些事件,会影响默认动作的执行。如:onclick和onsubmit
onclick="return test()"事件返回值,对有些事件,会影响默认动作的执行.如:onclick和onsubmit <body> <!--事件返回值 ...
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为 -1 ,sqlserver 里面 还没有测试过 using (var ctx = new MyDbConte ...
- spring aop影响dubbo返回值问题解决
问题描述: dubbo服务已经注册,客户端调用提供者服务返回值为空.(考虑动态代理.aop的返回值影响,dubbo基于spring2.5.6.SEC03,本次开发使用的是spring4.3.8) 解决 ...
随机推荐
- Cocos2d-x -自己定义动作 圆周运动
原文地址:http://blog.csdn.net/u012945598/article/details/17605409 在之前的文章中我们以前讲过Cocos2d-x中的各种动作的用法,我们先来简单 ...
- C#网络编程(订立协议和发送文件) - Part.4
文件传输 前面两篇文章所使用的范例都是传输字符串,有的时候我们可能会想在服务端和客户端之间传递文件.比如,考虑这样一种情况,假如客户端显示了一个菜单,当我们输入S1.S2或S3(S为Send缩写)时, ...
- sar 命令
sar 命令使用详解 1.使用sar命令查看网络流量(每两秒显示一次,共查看3次): [root@localhost ~]# sar -n DEV 2 3Linux 2.6.32-431.el6.x8 ...
- 数据的持久性存储(二)——CoreData(附Demo)
CoreData是一款稳定.功能全面的持久性工具.(本文参考iphone开发3所写,比较简要,需详细了解可以参考iphone开发3) 首先创建一个新的项目CoraData,记得勾选Use Core D ...
- 反射getattr,hasattr,setattr,delattr
通过字符串映射或修改程序运行时的状态.属性.方法, 有以下4个方法 getattr(object, name_str, default=None) 根据字符串name_str去获取obj对象里的方法内 ...
- 在液晶屏里显示浮点数的方法 (sprintf 的妙用)
思路:使用 sprintf 函数将浮点型数据转为指定格式的字符串 #include <stdio.h> #include<string.h> int main() { unsi ...
- C++对Lua中table进行读取、修改和创建
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- 2014.8.27 Vs2005宏的使用
终于知道怎么像在Word里那样使用宏了! 1.vs2005必须装补丁1 2.在C:\Program Files (x86)\Common Files\microsoft shared\VSA\8.0\ ...
- 第一章 Spring整体架构和环境搭建(待续)
········
- quarz入门案例
介绍 Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. 核心概念 Quartz ...