2013-06-26 35 views
13

我想在不使用try/catch塊的情況下使用finally塊,但在Eclipse中獲取錯誤。有沒有終於阻止嘗試和捕獲?

我可以在不使用try/catch塊的情況下使用finally塊嗎?

+0

即使你可以把'finally'沒有'try'你會如何想,如果你使用'goto'跳過了'finally'聲明你的'finally'表現? 'finally'只與它被標記爲與使用'try'語句相關的代碼相關。否則,這種行爲會非常煩人。 – CodeCamper

+0

你的意思是什麼是try-with-finally的用例,不使用catch塊?我認爲你不能只用「終於」。它應該與一些嘗試塊。 – user1923551

回答

12

finally應該至少有一個try塊,catch是可選的。 finally塊的目的是爲了確保東西得到清理,無論是否拋出異常。由於每JLS

一個finally從句確保finally塊try塊,並有可能被執行,無論怎麼控制離開try塊或catch塊的任何catch塊後執行

因此,一個finally應該總是在try塊之後。

5

您必須有一個try塊和finally塊。 try塊定義finally代碼將跟隨哪一行代碼。如果在try塊之前拋出異常,則finally代碼將不會執行。

添加catch塊是可選的:

try { 

    // something 

} finally { 
    // guaranteed to run if execution enters the try block 
} 
1

的finally塊總是執行try塊退出時。所以你可以在沒有catch的情況下最終使用,但你必須使用try。

有關詳情,請doc這裏

0

從甲骨文路線:

的finally塊總是執行try塊退出時。即使發生意外的 異常,此 可確保執行finally塊。

從上面的說明,你不能單獨阻止自己。以下是允許的組合。

  1. 嘗試 捕獲 最後

  2. 嘗試 捕獲

  3. 嘗試 最後

0

finally塊內的代碼是保證,如果程序的控制流進入到執行cor迴應try區塊。因此沒有tryfinally是沒有意義的。

唯一的例外是,如果程序在finally塊之前遇到System.exit(...)調用,因爲會關閉虛擬機。

0

不,你不能

可以使用Try-catch-finallytry-finally

try { 

    }catch (Exception e){ 

    } 
    finally{ 

    } 

try { 

    } 
    finally{ 

    } 
1

你之所以不能有一個finally沒有try是因爲你有多個finally狀態與try相同的範圍表示在發生錯誤時finally所涉及的代碼塊。

finally的另一個有趣功能是無論輸入try時它都必須執行。例如,如果您使用goto跳過您的finally聲明,該怎麼辦?如果goto位於try的內部,它將執行finally語句,但是如果goto位於try語句之上/之外,則它將跳過finally代碼。 finally僅與try中包含的代碼相關。如果您沒有嘗試,則finally與任何內容都無關。

1
  • 只使用try塊是不正確的。
  • 嘗試塊只能用於從catch或最終 塊只有一個塊。
  • 你可以使用帶try的try塊,最後使用try塊。如果最後使用try塊的塊 ,則catch塊變爲可選塊。
2
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 
} 
+2

你應該添加一個解釋 – Zelldon