一道無聊又有趣的 try catch 面試題

不少時候bug每每都是出在,咱們以爲很是簡單,不起眼的基礎知識上,年前公司最後一波招人,爲年後項目作技術儲備,主要招聘對象初中級Java開發,要求也並無多苛刻,惟一一點基礎稍好,快速上手作項目就行。在網上找了幾個比較簡單的面試題,結果一票應聘者答的慘不忍睹,其中不乏工做6年以上的老猿。面試

直接來看一下題目,就是在try catch finally中放入return ,來看返回的順序,這個在平常的代碼編寫中應該是很經常使用的了吧?不算是面試造航母~code

大概考察了幾種狀況: 一下 i 初始值都是 0 cdn

在這裏插入圖片描述

一、catch中有returnfinally中的代碼會執行嗎?

在這裏插入圖片描述
結果很明顯會執行:
在這裏插入圖片描述

二、catch中有returnfinally也有return,怎麼執行?

在這裏插入圖片描述
結果顯示 finally中的 return會比 catchreturn先執行
在這裏插入圖片描述
前邊兩個通常問題都不大,接着往下看

三、catchreturn變量,finally對變量作計算,返回結果是啥?

在這裏插入圖片描述
按照往常的邏輯,輸入0 ,通過++i,返回1沒毛病呀!
在這裏插入圖片描述

fuck! 咋是0?對象

i 賦初值爲0,捕獲到異常後進入 catchcatch 裏有return,可是後邊還有 finally,先執行 finally裏的,對i+1=1,而後 return。那 return 的是1?事實上不是1,而是0.爲什麼? blog

在這裏插入圖片描述

能夠清楚的看到i=1;可是返回的確是0?那說明此i非彼i,就是返回的i不是這個i圖片

由於這裏是值傳遞,在執行return前,保留了一個i的副本,值爲0,而後再去執行finally,finall完後,到return的時候,返回的並非當前的i,而是保留的那個副本,也就是0.因此返回結果是0.開發

四、 catchfinally同時return變量,返回結果又該是啥?

在這裏插入圖片描述

若是finally中有return不會走catch it

在這裏插入圖片描述

總結:io

  • catch中有return的狀況下,finally中的內容仍是會執行,而且是先執行finallyreturnclass

  • 須要注意的是,若是返回的是一個基本數據類型,則finally中的內容對返回的值沒有影響。由於返回的是 finally執行以前生成的一個副本。

  • catchfinally都有return時,return的是finally的值。

水文一篇沒什麼含金量,一點基礎知識總結,但願對大家有用


小福利:

關注個人公號,回覆【666】,有一份jike付費課程,噓~免費送給你們,無套路自行領取

相關文章
相關標籤/搜索