try 塊:用于捕獲異常。其后可接零個或多個catch塊,如果沒有catch塊,則必須跟一個finally塊。
catch 塊:用于處理try捕獲到的異常。
finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。在以下4種特殊情況下,finally塊不會被執行:
1)在finally語句塊中發生了異常。
2)在前面的代碼中用了System.exit()退出程序。
3)程序所在的線程死亡。
4)關閉CPU。
對于含有return語句的情況,這里我們可以簡單地總結如下:
try語句在返回前,將其他所有的操作執行完,保留好要返回的值,而后轉入執行finally中的語句,而后分為以下三種情況:
情況一:如果finally中有return語句,則會將try中的return語句”覆蓋“掉,直接執行finally中的return語句,得到返回值,這樣便無法得到try之前保留好的返回值。
情況二:如果finally中沒有return語句,也沒有改變要返回值,則執行完finally中的語句后,會接著執行try中的return語句,返回之前保留的值。
情況三:如果finally中沒有return語句,但是改變了要返回的值,這里有點類似與引用傳遞和值傳遞的區別,分以下兩種情況,:
1)如果return的數據是基本數據類型或文本字符串,則在finally中對該基本數據的改變不起作用,try中的return語句依然會返回進入finally塊之前保留的值。
2)如果return的數據是引用數據類型,而在finally中對該引用數據類型的屬性值的改變起作用,try中的return語句返回的就是在finally中改變后的該屬性的值。