想象一下我有以下方法:
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()
我的问题是 funcB 为什么不需要围绕这个抛出异常的 java api 方法执行 try-catch 块。funcB 在没有 try-catch 块的情况下编译得很好。我相信答案与 java api 方法抛出异常但未声明为“抛出 IndexOutOfBoundsException”这一事实有关
函数链:funcA() -> funcB() -> ByteBuffer.wrap(...)
我的下一个问题是,当我将funcB更改为“funcB() throws IndexOutOfBoundsException”时,为什么 funcA 不需要捕获 funcB 抛出的异常?编译器是否深入挖掘并意识到 ByteBuffer.wrap(...) 没有声明为“wrap() throws IndexOutOfBoundsException”,所以所有调用者实际上不需要捕获任何东西,甚至是子调用者(在这种情况下是 funcB)被声明为“funcB throws IndexOutOfBoundsException”?
抱歉,如果这令人困惑或难以理解。
请帮忙。
吉布