2017-06-14 6 views
0

java-7の機能「正確な再暴走」とfinal Exception exについて多くの質問がありますが、私の質問に対しては明確な答えが見つかりませんでした。「正確な再暴走」と最終的な例外との関係

"正確な再暴行"とfinal Exceptionの関係は何ですか?

public static void main(String args[]) throws OpenException, CloseException { 
    boolean flag = true; 
    try { 
     if (flag){ 
      throw new OpenException(); 
     } 
     else { 
      throw new CloseException(); 
     } 
    } 
    catch (final Exception e) { 
     System.out.println(e.getMessage()); 
     throw e; 
    } 
} 

は、私は、「正確な再スロー」を使用したい場合は義務 finalキーワードを使用することですか?

catch (final Exception e) { 
    System.out.println(e.getMessage()); 
    throw e; 
} 

それは必須ではない場合、私は新しい例外にex参照を再割り当てすることができますか?

catch (Exception e) { 
    System.out.println(e.getMessage()); 
    e=new AnotherException(); 
    throw e; 
} 

答えて

2

正確な再スローセマンティクスを取得するためにfinalとして例外パラメータ(あなたの例でe)を宣言する必要はありません。パラメータがの場合、最終的にはの場合、正確な再暴行を受けることができます。

2番目の例では、パラメーターは実質的に最終的なものではないため、正確な再スローセマンティクスは得られません。

(あなたがeに割り当てる例外がtryブロックでスローされた元の例外への代入互換性である場合、これはでも適用されます。)

参考:JLS 11.2.2

+0

「効果的に最終的に」とはどういう意味ですか? –

+0

何も割り当てられていないことを意味します。私がリンクしている参照を読んでください!! –

関連する問題