メソッドがあると想像してください:
public static void funcA() {...}
public static void funcB()
{
byteBuffer.wrap(someByteArray, 0, someByteArra.length);
}
Java API の場合:
public static ByteBuffer wrap(byte[]array, int offset, int length)
{
try {
return new HeapByteBuffer(array, offset, length);
} catch (IllegalArgumentException x) {
throw new IndexOutOfBoundsException();
}
}
関数チェーン: funcB() -> ByteBuffer.wrap()
私の質問は、例外をスローするこの Java api メソッドの周りで funcB が try-catch ブロックを実行する必要がないのはなぜですか。funcB は、try-catch ブロックなしで正常にコンパイルされます。答えは、Java APIメソッドが例外をスローするが、「IndexOutOfBoundsExceptionをスローする」と宣言されていないという事実に関係していると思います
関数チェーン: funcA() -> funcB() -> ByteBuffer.wrap(...)
次の質問は、funcB を「funcB() が IndexOutOfBoundsException をスローする」に変更するとき、なぜfuncAが funcB のスローされた例外をキャッチする必要がないのかということです。コンパイラは深く掘り下げて、ByteBuffer.wrap(...) が「wrap() が IndexOutOfBoundsException をスローする」と宣言されていないことを認識するので、すべての呼び出し元は実際にはサブ呼び出し元 (この場合は funcB) でさえ実際に何かをキャッチする必要はありません。 「funcB が IndexOutOfBoundsException をスローする」と宣言されていますか?
わかりにくかったり、わかりにくかったらすみません。
助けてください。
jbu