2008-12-24 43 views

回答

6

從finally塊中拋出異常還會摧毀原始異常(如果有的話)。

編輯:找到了解釋「突然完成」的參考。
§14.1: Normal and Abrupt Completion of Statements

的突然完成總是有一個 相關原因,這是繼 之一:

  • 沒有標籤
  • 與給定的標籤
  • 斷開部的斷裂
  • A繼續使用無標籤
  • 繼續使用給定的標籤
  • 沒有價值的返回
  • 與給定值
  • 與給定值一拋,包括 Java虛擬機拋出的異常的返回

最後三個是唯一可能在finally子句中,除非它在循環中。

0

Sys.exit()或強制中止。特別是GUI程序對於異常調用Sys.exit()是臭名昭着的,部分原因是直到JVM 1.5存在的缺陷 - 從GUI線程拋出的異常沒有將其移交給主線程。

更新:尤其是對誰低估了這一點。對不起,但Sys.exit()確實意味着突然終止,包括導致堆棧不能解開;我將在明天提交一份針對文檔的錯誤。我可以在某些權威人士的講話中談到這一點,他在Sun擔任高級Java架構師多年。

0

我想它也可能是一個開關內部的break語句,如果finally塊是switch case的一部分的話。 另外,如果finally塊調用一些其他語言實現的方法,它可能會執行該語言的編譯器所需的任何操作。