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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

谜题36:优柔寡断

發布時間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谜题36:优柔寡断 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面這個可憐的小程序并不能很好地做出其自己的決定。它的decision方法將返回true,但是它還返回了false。那么,它到底打印的是什么呢?甚至,它是合法的嗎?

public class Indecisive { public static void main(String[] args) { System.out.println(decision()); } static boolean decision() { try { return true; } finally { return false; } } }

你可能會認為這個程序是不合法的。畢竟,decision方法不能同時返回true和false。如果你嘗試一下,就會發現它編譯時沒有任何錯誤,并且它所打印的是false。為什么呢?

原因就是在一個try-finally語句中,finally語句塊總是在控制權離開try語句塊時執行的[JLS 14.20.2]。無論try語句塊是正常結束的,還是意外結束的,情況都是如此。一條語句或一個語句塊在它拋出了一個異常,或者對某個封閉型語句執行了一個break或continue,或是象這個程序一樣在方法中執行了一個return時,將發生意外結束。它們之所以被稱為意外結束,是因為它們阻止程序去按順序執行下面的語句。

當try語句塊和finally語句塊都意外結束時,在try語句塊中引發意外結束的原因將被丟棄,而整個try-finally語句意外結束的原因將于finally語句塊意外結束的原因相同。在這個程序中,在try語句塊中的return語句所引發的意外結束將被丟棄,而try-finally語句意外結束是由finally語句塊中的return造成的。簡單地講,程序嘗試著(try)返回(return)true,但是它最終(finally)返回(return)的是false。

丟棄意外結束的原因幾乎永遠都不是你想要的行為,因為意外結束的最初原因可能對程序的行為來說會顯得更重要。對于那些在try語句塊中執行break、continue或return語句,只是為了使其行為被finally語句塊所否決掉的程序,要理解其行為是特別困難的。

總之,每一個finally語句塊都應該正常結束,除非拋出的是不受檢查的異常。千萬不要用一個return、break、continue或throw來退出一個finally語句塊,并且千萬不要允許將一個受檢查的異常傳播到一個finally語句塊之外去。

對于語言設計者,也許應該要求finally語句塊在未出現不受檢查的異常時必須正常結束。朝著這個目標,try-finally結構將要求finally語句塊可以正常結束[JLS 14.21]。return、break或continue語句把控制權傳遞到finally語句塊之外應該是被禁止的,任何可以引發將被檢查異常傳播到finally語句塊之外的語句也同樣應該是被禁止的。

轉載于:https://www.cnblogs.com/yuyu666/p/9840484.html

總結

以上是生活随笔為你收集整理的谜题36:优柔寡断的全部內容,希望文章能夠幫你解決所遇到的問題。

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