2016-08-18 3 views
1

assyliasについてよく説明しますfinal rethrow。 最後にmethod3に追加しました。java7での正確な再提供例外

public void method4() throws IOException { 
    try { 
     throw new IOException("1"); 
    } catch (final Exception e) { 
     e = new IOException("2"); //does not compile 
     throw e; //does not compile 
    } 
} 

コンパイラを1.7に設定しました。 は、2つのエラーをコンパイルしています

だから、
final exception can neither be reassigned nor throw precise exception. 

を、明示最終例外は唯一の変更を防止するために使用されていますか?

答えて

0

Exceptionのキャッチブロックは暗黙的にfinalであり、再割り当てすることはできません。具体的にfinalにすると、コンパイラはその参照を変更することを許可しません。 throwコンパイル例外インスタンスは、finalまたはfinalのように、すでにリンクされた回答でカバーされている必要があります。

public void method4() throws IOException { 
    try { 
     throw new IOException("1"); 
    } catch (final Exception e) { 
     e = new IOException("2");// You can not modify final reference 
     throw e; 
    } 
} 

ので、明示的に最後の例外は、唯一の変更を防止するために使用されていますか?

はい、例外の場合は、final修飾子は冗長です。例外は常にthrowまたはlogにすることをお勧めします。例外の修正は、私によれば、の逆パターンです。一般的に言えば、カスタム例外の場合であっても、その理由が非常に強い限り、スローされた例外を修正するべきではありません。

関連する問題