不少時候bug每每都是出在,咱們以爲很是簡單,不起眼的基礎知識上,年前公司最後一波招人,爲年後項目作技術儲備,主要招聘對象初中級Java開發,要求也並無多苛刻,惟一一點基礎稍好,快速上手作項目就行。在網上找了幾個比較簡單的面試題,結果一票應聘者答的慘不忍睹,其中不乏工做6年以上的老猿。面試
直接來看一下題目,就是在try catch finally
中放入return
,來看返回的順序,這個在平常的代碼編寫中應該是很經常使用的了吧?不算是面試造航母~code
大概考察了幾種狀況: 一下 i
初始值都是 0
cdn
catch
中有return
,finally
中的代碼會執行嗎?catch
中有return
,finally
也有return
,怎麼執行?finally
中的
return
會比
catch
中
return
先執行
前邊兩個通常問題都不大,接着往下看
catch
中return
變量,finally
對變量作計算,返回結果是啥?fuck! 咋是0
?對象
i
賦初值爲0
,捕獲到異常後進入 catch
,catch
裏有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.開發
catch
、finally
同時return
變量,返回結果又該是啥?若是finally
中有return
不會走catch
it
總結:io
在catch
中有return
的狀況下,finally
中的內容仍是會執行,而且是先執行finally
再return
。class
須要注意的是,若是返回的是一個基本數據類型,則finally
中的內容對返回的值沒有影響。由於返回的是 finally
執行以前生成的一個副本。
當catch
和finally
都有return
時,return
的是finally
的值。
水文一篇沒什麼含金量,一點基礎知識總結,但願對大家有用
關注個人公號,回覆【666】,有一份jike付費課程,噓~,免費送給你們,無套路自行領取