java异常链接问题

jbu*_*jbu 2 java exception chaining

想象一下,我有方法:

public static void funcA() {...}

public static void funcB() 
{
    byteBuffer.wrap(someByteArray, 0, someByteArra.length);
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

函数链: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

Joh*_*ood 9

IndexOutofBoundsException扩展了RuntimeException.它是一个runtimeexception,不需要检查.

未经检查的例外 - 争议.