首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 經典面試題:finally 不執行的唯一場景

     編輯:程式設計綜合問答

題目

前提:代碼已進入 try 塊。什麼情況下 finally 不會執行?

標準答案

try {
    System.exit(0); // JVM 直接退出,finally 無機會執行
} finally {
    System.out.println("不會打印");
}

其他不執行場景(極端)

  • Runtime.getRuntime().halt(0):強制終止 JVM,不運行關閉鉤子。
  • JVM 進程被外部殺死(kill -9、任務管理器結束進程)。
  • 死循環/死鎖導致線程永不離開 try 塊(技術上 finally 還沒到執行點)。
  • 調用 System.exit() 後,註冊的 ShutdownHook 會運行,但 finally 不會。

面試加分點

  1. 明確區分 return / throw Exception / 正常結束 → **finally 都會執行**。
  2. 說明 System.exit() 觸發 JVM 關閉流程,直接跳過棧展開。
  3. 補充:try-with-resources 同理,close() 也不會被調用。

這道題考察對 JVM 生命周期與異常處理機制的深度理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved