try-catch-finally对返回值的影响
catch?和?finally?一起使用的常見方式是:在?try?塊中獲取并使用資源,在?catch?塊中處理異常情況,并在?finally?塊中釋放資源。
?finally?塊用于清理try塊分配的任何資源,無論try中是否異常或者終止(return),finally塊都會執行。
如果在finally塊中修改了返回值,會對最終返回的結果有何影響呢?
1,如果返回值是值類型
//finally執行,i值是2013,但是最終返回2015 static int test(){int i = 2016;try{i=2015;return i;}catch{//有異常才會到這里i=2014;
return i;}finally{i=2013;}}
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[0]="d";return arr;}catch{//有異常才會到這里arr[0]="f";
return arr;}finally{arr[0]="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正確返回了,就不會執行。}
?
轉載于:https://www.cnblogs.com/imust2008/p/5611916.html
總結
以上是生活随笔為你收集整理的try-catch-finally对返回值的影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】jQuery获取Select op
- 下一篇: 结构体成员的引用方法