想象一下,我有方法:
public static void funcA() {...} public static void funcB() { byteBuffer.wrap(someByteArray, 0, someByteArra.length); }
IN 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块.没有try-catch块,funcB编译得很好.我相信答案与java api方法抛出异常这一事实有关但是因为"抛出IndexOutOfBoundsException"而不是DECLARED
函数链:funcA() - > funcB() - > ByteBuffer.wrap(...)
我的下一个问题是,当我不要改变funcB为"funcB()抛出IndexOutOfBoundsException异常"怎么FuncA的并不需要赶上funcB的抛出的异常?编译器是否深入挖掘并意识到ByteBuffer.wrap(...)未被声明为"wrap()抛出IndexOutOfBoundsException"因此所有调用者实际上不需要捕获任何内容甚至是子调用者(在本例中为funcB)被声明为"funcB抛出IndexOutOfBoundsException"?
对不起,如果那令人困惑或难以理解.
请帮忙.
JBU
IndexOutofBoundsException扩展了RuntimeException.它是一个runtimeexception,不需要检查.
看未经检查的例外 - 争议.