2011-07-05 136 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); 

...在你捕捉{}块