2011-07-05 189 views
-2

如果我有以下代碼:嘗試捕捉在Java

try { 
    Entity questionEntity = datastore.get(currentKey); 
    questionEntity.doSomething(); 
} catch (EntityNotFoundException e) { 
    Entity questionEntity = new Entity(currentKey); 
} 

datastore.get()函數拋出一個異常,將在try塊代碼(questionEntity.doSomething();)以下行來執行?

+1

那(questionEntity.doSomething())線當且僅當執行上一行沒有導致異常被拋出。 –

回答

11

不,questionEntity.doSomething();將不會執行,如果datastore.get(currentKey);引發異常,這很容易驗證,並且可能會花費更少的時間自己嘗試它,而不是在SO上發佈問題。

+0

我知道我沒有訪問我通常使用的計算機。我很確定它會跳過,但必須確定。謝謝:) –

+0

@Jonathan。,現在你可以肯定:-) –

+0

謝謝:)我發現這個try-catch塊「東西」有點混亂,可以把try-catch塊放在對方內嗎? –

7

否,如果get拋出異常,控制將要麼轉移到(如果異常是EntityNotFoundException)或所示的catch程序塊越往上疊層否則。它不會繼續下一行。

異常點的一部分是避免代碼繼續嘗試工作,就好像什麼事發生了什麼事情一樣。這避免了你(比如說)在數據讀取失敗的情況下用良好的數據覆蓋損壞或不完整的數據。

2

號:

  1. 如果EntityNotFoundException,捕捉將被執行
  2. 如果有任何其他異常,異常將被拋出高達調用代碼。

  3. 如果必須執行代碼,請考慮finally子句。 (在這種情況下,這是行不通的,因爲這是實體初始化

2

沒有也不會是唯一的地方。該代碼將繼續catch塊異常後立即跳過所有代碼後異常

1

否 - 它會立即跳轉到:。

Entity questionEntity = new Entity(currentKey); 

...在你捕捉{}塊