[英]Java try- catch- finally block
如果我運行以下代碼:
try{
return false;
} catch(Exception e){
e.printStackTrace();
}
finally{
return true;
}
為什么返回true ?
摘自Java Language Specification第14.20.2節
(我的斜體字)。 return
是一種“突然完成”,換句話說, finally
的return
否決了try
內部的return
。
之所以返回true
是因為無論何時finally
塊通過return
-ing或引發異常而突然完成,該完成都會取代以前的任何返回值或異常。 (請參見Java SE 7版Java語言規范中的第14.20.2節“ try-finally
和try-catch-finally
” 。)
因為無論在try catch部分發生什么,finally塊都將始終按照您的要求進行操作,因此在這種情況下它將返回true。 只需刪除finally語句,它應該返回false。
當try或catch塊通過調用System.exit
函數終止時, System.exit
塊不執行。 類似地,如果執行try catch的線程在執行try或catch塊時死亡,那么finally塊可能不會執行。
因此,即使try塊返回false,您的try catch finally塊也幾乎總是返回true。
因為如果遇到返回,finally塊將始終執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.