4.7.5 Exceptionsプロパティ
Exceptions属性は可変長属性で、method_info(§4.6)構造の属性テーブルにあります。
Exceptions属性は、メソッドがチェックする必要のある可能性のある例外を示します。method_info構造体には、最大で1つのExceptions属性を含めることができます。
Exceptions属性の形式は次のとおりです。
Exceptions_attribute { u2 attribute_name_index; u4 attribute_length; u2 number_of_exceptions; u2 exception_index_table [number_of_exceptions]; }
Exceptions_attribute形式の項目の説明は次のとおりです
。attribute_name_index
attribute_name_index項目の値は、定数プールの有効なインデックスである必要があります。このインデックスの定数プールのメンバーは、文字列「Exceptions」を表すCONSTANT_Utf8_info(§4.4.7)構造体である必要があります。
attribute_length
attribute_length項目の値は、最初の6バイトを除く現在の属性の長さを示します。
number_of_exceptions
number_of_exceptionsアイテムの値は、exception_index_table []配列内のメンバーの数を示します。
exception_index_table []
exception_index_table []配列の各メンバーの値は、定数プールの有効なインデックスである必要があります。これらのインデックスの定数プールのメンバーはすべてCONSTANT_Class_info(§4.4.1)構造である必要があります。これは、このメソッドがスローするクラスのタイプを宣言していることを示しています。
メソッドが例外をスローする場合は、次の3つの条件の少なくとも1つを満たす必要
があります。スローされるのは、RuntimeExceptionまたはそのサブクラスのインスタンスです。
スローされるインスタンスはErrorまたはそのサブクラスです。
スローされるのは、exception_index_table []配列で宣言された例外クラスまたはサブクラスのインスタンスです。
これらの要件はJava仮想マシンでは強制されず、コンパイル時にのみ強制されます。