日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

try-catch-finally 与返回值的修改

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 try-catch-finally 与返回值的修改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看一段java代碼,func返回值為int:

1 public static int func() { 2 int result = 0; 3 try { 4 result = 1; 5 return result; 6 } catch (Exception e) { 7 result = 2; 8 return result; 9 } finally { 10 result = 3; 11 } 12 }

正確的返回結果是,func返回1。


?

分析可總結為:

  如果finally中沒有return語句,但是改變了要返回的值,這里有點類似與引用傳遞和值傳遞的區別,分以下兩種情況,:

  1)如果return的數據是基本數據類型或文本字符串**,則在finally中對該基本數據的改變不起作用,try中的return語句依然會返回進入finally塊之前保留的值。

  2)如果return的數據是引用數據類型,而在finally中對該引用數據類型的屬性值的改變起作用,try中的return語句返回的就是在finally中改變后的該屬性的值。


?

return 是String類型的code:

1 public static String funcStr() { 2 String result = "hello"; 3 try { 4 result = "1"; 5 return result; 6 } catch (Exception e) { 7 result = "2"; 8 return result; 9 } finally { 10 result = "3"; 11 } 12 }

該函數返回值為字符串”1”。


?

return?是引用數據類型(對象):

1 public static Person funcPerson() { 2 Person result = new Person(20); 3 try { 4 result.age = 30; 5 return result; 6 } catch (Exception e) { 7 result.age = 40; 8 return result; 9 } finally { 10 result.age = 50; 11 } 12 } 13 14 static class Person { 15 public int age; 16 public Person(int age) { 17 this.age = age; 18 } 19 }

該函數的返回類型是resultPerson,age為50,即在finally中更改了有效。


?

總結:

  如果沒有異常出現,而且finally語句中沒有return,則會執行try里邊的return,并且,會將變量暫存起來(對象存的是引用的地址),再去執行finally中的語句,這時候,如果返回值是基本數據類型或者字符串,則finally相當于更改副本,不會對暫存值有影響;但是,如果返回值是對象,則finally中的語句,仍會根據地址的副本,改變原對象的值。所以上邊的例子,返回值的age為50。

轉載于:https://www.cnblogs.com/sunweiye/p/10952319.html

總結

以上是生活随笔為你收集整理的try-catch-finally 与返回值的修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。