簡體   English   中英

Java try-catch-finally塊

[英]Java try- catch- finally block

如果我運行以下代碼:

try{
   return false;
} catch(Exception e){
       e.printStackTrace();
}
finally{
   return true;
}

為什么返回true

摘自Java Language Specification第14.20.2節

  • 如果由於任何其他原因R導致try塊的執行突然完成,則執行finally塊,然后可以選擇:
    • 如果finally塊正常完成,則try語句由於原因R突然完成。
    • 如果final塊由於原因S突然完成,則try語句由於原因S突然完成(並且原因R被丟棄)

(我的斜體字)。 return是一種“突然完成”,換句話說, finallyreturn否決了try內部的return

之所以返回true是因為無論何時finally塊通過return -ing或引發異常而突然完成,該完成都會取代以前的任何返回值或異常。 (請參見Java SE 7版Java語言規范中的第14.20.2節“ try-finallytry-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM