1

なぜjava.lang.RuntimeException(またはそのサブクラス)がtry/catchでコードを書くことを強制しないのですか

提供された:

java.lang.Exceptionまたはそのサブクラス (checked-exception と呼ばれる) は、コードをtry/catchブロック内に記述することを強制するか、それを処理することを強制します。

java.lang.RuntimeExceptionでは、サブクラス (unchecked-exception と呼ばれる)が、拡張している場合でも、try/catch ブロックにコードを書くことを強制しないのはなぜですか?java.lang.Exception

追加された例:

public class ExceptionTest
{
    public static void main(String[] args)
    {
        // HOW COMPILER COME TO KNOW or DECIDE THIS METHOD IS THROWING RuntimeException or Exception (Keep in mind java.lang.RuntimeException is again extending java.lang.Exception) 
        new ExceptionTest().test_1();
    }

    public void test_1() throws MyException
    {

    }
}

class MyRuntimeRuntimeException extends RuntimeException
{
    public MyRuntimeRuntimeException() {
        // TODO Auto-generated constructor stub
    }
}

class MyException extends Exception
{
    public MyException() {
        // TODO Auto-generated constructor stub
    }
}
4

4 に答える 4

1

これは、Java コンパイラの設計が、その時点でRuntimeExceptionを拡張するクラスが存在する場合、それを処理することを強制しないことを認識しているためです。それらの例外はほとんど発生しないからです。

したがって、コンパイラ自体は、このシナリオをチェックするように設計されています。

于 2013-08-08T09:42:45.720 に答える
0

いくつかの例外をスローする可能性のあるメソッドは非常に普及しているため、それらをスローする可能性のあるすべてのメソッドがそれらを宣言する必要がある場合、それらはほとんどすべてのメソッド宣言に表示されます。たとえば、オブジェクトのメンバーにアクセスするために参照を使用するメソッドは、 をカバーする catch を持つ try ブロックの外側で、NullPointerExceptionをスローする可能性がありNullPointerExceptionます。

すべてのメソッドで宣言NullPointerExceptionしても、メソッドで宣言しない場合よりも多くの情報が伝達されず、throws 宣言が乱雑になります。

システムは、RuntimeExceptionどこでもスローされる可能性があり、めったにキャッチされない例外で throws 節を埋めることを回避します。

于 2013-08-08T07:26:40.477 に答える