回答
finally
應該至少有一個try
塊,catch
是可選的。 finally塊的目的是爲了確保東西得到清理,無論是否拋出異常。由於每JLS
一個finally從句確保finally塊try塊,並有可能被執行,無論怎麼控制離開try塊或catch塊的任何catch塊後執行。
因此,一個finally
應該總是在try
塊之後。
您必須有一個try
塊和finally
塊。 try
塊定義finally
代碼將跟隨哪一行代碼。如果在try
塊之前拋出異常,則finally
代碼將不會執行。
添加catch
塊是可選的:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
的finally塊總是執行try塊退出時。所以你可以在沒有catch的情況下最終使用,但你必須使用try。
有關詳情,請doc這裏
從甲骨文路線:
的finally塊總是執行try塊退出時。即使發生意外的 異常,此 可確保執行finally塊。
從上面的說明,你不能單獨阻止自己。以下是允許的組合。
嘗試 捕獲 最後
嘗試 捕獲
嘗試 最後
的finally
塊內的代碼是保證,如果程序的控制流進入到執行cor迴應try
區塊。因此沒有try
的finally
是沒有意義的。
唯一的例外是,如果程序在finally
塊之前遇到System.exit(...)
調用,因爲會關閉虛擬機。
不,你不能
可以使用Try-catch-finally
或try-finally
try {
}catch (Exception e){
}
finally{
}
或
try {
}
finally{
}
你之所以不能有一個finally
沒有try
是因爲你能有多個finally
狀態與try
相同的範圍表示在發生錯誤時finally
所涉及的代碼塊。
finally
的另一個有趣功能是無論輸入try
時它都必須執行。例如,如果您使用goto
跳過您的finally
聲明,該怎麼辦?如果goto
位於try
的內部,它將執行finally
語句,但是如果goto
位於try
語句之上/之外,則它將跳過finally
代碼。 finally
僅與try
中包含的代碼相關。如果您沒有嘗試,則finally
與任何內容都無關。
- 只使用try塊是不正確的。
- 嘗試塊只能用於從catch或最終 塊只有一個塊。
- 你可以使用帶try的try塊,最後使用try塊。如果最後使用try塊的塊 ,則catch塊變爲可選塊。
try {
// Block of code with multiple exit points
}
finally {
// Block of code that must always be executed when the try block
// is exited, no matter how the try block is exited
}
你應該添加一個解釋 – Zelldon
- 1. Scala的「嘗試」是什麼意思,沒有捕捉或最終阻止?
- 2. 嵌套嘗試塊沒有捕獲或最終塊
- 3. 嘗試除非沒有捕獲錯誤
- 4. PHP PDO嘗試catch塊沒有捕獲
- 5. 嘗試和捕捉laravel沒有$ id
- 6. 嘗試捕捉塊不阻止異常
- 7. 有沒有辦法通過引用來阻止lambda捕獲
- 8. 我們可以只有最後一個阻止與嘗試和捕捉?
- 9. 有沒有辦法嘗試在C#中捕獲靜態屬性?
- 10. 有沒有辦法阻止捕獲停止我的Java應用程序?
- 11. 嘗試除了沒有捕捉異常
- 12. FileSystemWatcher阻止調試器捕獲異常
- 13. JobHost.RunAndBlock沒有阻止
- 14. 有和沒有終止字符
- 15. 有沒有辦法阻止鐵路由器嘗試路由鏈路?
- 16. Python沒有捕獲嘗試/除了錯誤
- 17. C#:嘗試,趕上沒有捕獲異常
- 18. 使用沒有嘗試捕獲的事務
- 19. 嘗試除了沒有捕獲類的IOError
- 20. 嘗試catch塊沒有捕獲嵌套的回調
- 21. 檢查文件鎖定沒有嘗試捕獲
- 22. 有沒有辦法阻止byobu終端超時?
- 23. 有沒有辦法阻止從sys.exit()引發的SystemExit異常被捕獲?
- 24. WebResponse嘗試捕獲
- 25. MySql嘗試捕獲
- 26. 我想嘗試和捕捉雙,但沒有奏效
- 27. 嘗試捕捉鉻沒有捕捉語法錯誤
- 28. 是否有嵌套嘗試和捕獲的替代方法?
- 29. 終於沒有試過後調用
- 30. 如何終止非阻塞套接字連接嘗試?
即使你可以把'finally'沒有'try'你會如何想,如果你使用'goto'跳過了'finally'聲明你的'finally'表現? 'finally'只與它被標記爲與使用'try'語句相關的代碼相關。否則,這種行爲會非常煩人。 – CodeCamper
你的意思是什麼是try-with-finally的用例,不使用catch塊?我認爲你不能只用「終於」。它應該與一些嘗試塊。 – user1923551