try-catch-finally对返回值的影响
2024-08-25 17:48:00
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正确返回了,就不会执行。
}
最新文章
- [HDU 3689]Infinite monkey theorem (KMP+概率DP)
- 文件处理函数fopen、fread、fseek、fclose的使用实例介绍
- Project Euler 106:Special subset sums: meta-testing 特殊的子集和:元检验
- ie6/7/8中span右浮动折行问题的解决方案
- BZOJ3390: [Usaco2004 Dec]Bad Cowtractors牛的报复
- Mysql自动填充测试数据
- oracle之备份详解
- 让你用sublime写出最完美的python代码--windows环境
- iBatis基础知识
- nyoj VF
- SpringBoot+ Mybatis 搭建
- [Swift]LeetCode90. 子集 II | Subsets II
- String:字符串常量池
- Android NDK开发调试
- oracle 如何查询/修改dmp文件的字符集
- python中的风险
- javase高级技术 - 反射
- scala中的一些特殊符号的意义
- 将Unity导出的Eclipse工程转换为AndroidStudio工程
- seekg()/seekp()与tellg()/tellp()的用法详解