Java检查异常不在函数的throw规范中?

通常,Java编译器确认抛出的所有检查的异常都在throw规范中。 当本地函数抛出一个不在函数throw规范列表中的java检查异常,或者在运行时忽略抛出规范列表时,是否会发生任何特殊情况?

C ++

void function(JNIEnv * env, jclass jc) {
    jclass newExcCls = env->FindClass("java/lang/NullPointerException");
    env->ThrowNew(newExcCls, "ERROR");
}

Java的

public class Tester {
    static {
        System.loadLibrary( "MyLibrary" );
    }        
    private static native void function();
    public static void main(String [ ] args) {
        try {
            function();
        } catch( Exception e ) { //is it caught? Or what happens?
            e.printStackTrace();
        }        
    }
}

(C ++函数的名字可能会被破坏,loadLibrary也应该是try catch。不关心,我不相信它与问题有关。代码中可能还有其他错误,但它们可能不相关无论是。)


你甚至不必诉诸本地代码来欺骗检查的异常机制。 请参阅Thread.stop上的Javadoc(Throwable)。 我曾经一直想知道我的代码如何在没有声明它的代码中间抛出一个InterruptedException 。 我甚至没有找到答案,但现在我知道了:)

回答您的直接问题:是的,检查的异常逻辑是仅编译器的功能,在运行时会被忽略。

链接地址: http://www.djcxy.com/p/5951.html

上一篇: Java checked exception not in the function's throw specification?

下一篇: Fuzzy interpretation of XmlPullParser.END