【发布时间】:2009-04-04 04:18:27
【问题描述】:
想象一下我有方法:
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(...)
我的下一个问题是当我 DO 将 funcB 更改为“funcB() throws IndexOutOfBoundsException”时,为什么 funcA 不需要捕获 funcB 抛出的异常?编译器是否深入挖掘并意识到 ByteBuffer.wrap(...) 没有声明为“wrap() throws IndexOutOfBoundsException”,所以所有调用者实际上不需要捕获任何东西,甚至是子调用者(在这种情况下是 funcB)被声明为“funcB throws IndexOutOfBoundsException”?
抱歉,如果这令人困惑或难以理解。
请帮忙。
jbu
【问题讨论】: