Проверенное исключение Java отсутствует в спецификации броска функции?

Обычно компилятор Java подтверждает, что все выбрасываемые проверенные исключения находятся в спецификации throw. Происходит ли что-то особенное, когда нативная функция выдает проверенное исключение java, которого нет в списке спецификаций бросков функций, или список спецификаций бросков просто игнорируется во время выполнения?

С++

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

Ява

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 должен быть в попытке поймать. Неважно, я не верю, что это имеет отношение к проблеме. Возможно, в коде есть и другие ошибки, но они, вероятно, тоже не имеют значения.)

10
задан Mooing Duck 1 August 2012 в 19:52
поделиться