1

これはそれらが何であるかという問題ではなく、それらが内部でどのように実装されているかという問題です。コンパイラは、チェックされた例外(たとえば、RuntimeExceptionを除いてExceptionから直接派生したもの)とチェックされていない例外(たとえば、RuntimeExceptionから派生したもの)をどのように区別しますか。例外クラス定義に、try / catchブロックに配置する必要のある例外を示す特別なフラグがありますか、それともJavaコンパイラに特定のルールがありますか(たとえば、Java言語設計では、チェックされるかどうかの例外のタイプが明示的に指定されます)。

4

2 に答える 2

2

これはJavaコンパイラによって強制され、実行時にダブルチェックされますThrowable。extendsRuntimeExceptionまたは、の場合、チェックErrorされていないと見なされます。他のすべてがチェックされます。

実行時に、このチェックも実施されます(理論的には、実行時にJavaクラスを「構築」できることを忘れないでください)。

于 2013-01-05T14:19:00.427 に答える
0

チェックされていないすべての例外は、クラスRuntimeExceptionまたはクラスの後継Errorです。他のすべてがチェックされます。たとえば、リフレクションを使用すると、現在の例外のこの特定のクラスのスーパークラスであるクラスをいつでも検出できます。これは、Javaコンパイラがそれらの型を検出する方法と同じです。

于 2013-01-05T14:15:40.190 に答える