java中finally一定會執行嗎?

2021-08-04 07:35:26 字數 575 閱讀 2803

面試的時候,經常會被問到finally的用法,是否一定會執行,有return的情況會怎麼樣?

大多數應該都認為finally 是一定會被執行的,其實不然。看下面的**:

public int getnum()  

try

} catch (exception e)

finally

return num;

}

通過測試發現,如果程式不執行try語句塊,那麼就不會執行finally。jvm具體如何操作,不知道。

下面討論第二種情況,進了try語句塊,finally還執行嗎,是在return之後執行,還是return之前執行,通過斷點測試:

會先執行return num; 進行返回,但沒有返回,下一步跳到finally語句上,執行finally語句,最後再跳到return語句上進行返回。這一系列的步驟大家可以打斷點測試一下,想深入研究可以自己研究一下jvm是如何工作的。

特殊情況:也不會執行finally

system.exit(0);   退出虛擬機器,自然不會執行finally

執行緒中斷。

用心,就一定會幸福

一直覺得,自己不是乙個幸福的人。面對太美好的事物,反而容易擔心,這是做夢吧?怎麼可能有這樣的幸運降臨到自己身上呢?要不然就會想,是不是很快就會消失了呢?然而,要命的完美主義又讓我無法輕易地得過且過 生命於是變成了一場詭計,它安排我去追逐乙個又乙個可能一輩子也無法實現的夢,在過程中我還不斷的檢視自己,...

看完你一定會安裝閥門!

01閥門定位器的安裝和校準 閥門定位器svp經設計可承受嚴苛的操作條件。但是,安裝位罟必須滿足某些標準,否則可能產生非預斯操作。閥門定位器旨在在以下條件下操怍 環境溫度為 40 c 80 c相對濕度為10 90 溫度和顯度不突然變化磁場感亞未超過400a m。避免格svp安裝在大型變壓器高頻電爐等裝...

MqSql一定一定會索引失效的幾種情況

使用explain查詢 檢視key是否命中索引 1.表層面,兩個表關聯時,如果兩個表關聯欄位的的編碼不同,不會走索引。如乙個表時 utf8,另外乙個表是utf8mb4 2.like查詢是以 開頭,索引不會命中,放後面會命中 3.如果查詢時,查詢的字段型別沒有寫對,底層會隱式處理加上函式,不會命中 4...