Подтвердить что ты не робот

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

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

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();
        }        
    }
}

(Название функции С++, вероятно, будет искажено. Также loadLibrary должен быть в try catch. Не волнует, я не считаю, что это относится к проблеме. Возможно, в коде есть другие ошибки, но они вероятно, не имеет значения.)

4b9b3361

Ответ 1

Вам даже не нужно прибегать к собственному коду, чтобы обмануть проверенный механизм исключения. См. Javadoc на Thread.stop(Throwable). Я когда-то забывал весь день, как мой код бросил InterruptedException в середине кода, который не объявлял его. Тогда я даже не нашел ответа, но теперь я знаю:)

Отвечая на ваш вопрос: да, проверенная логика исключений является функцией только для компилятора и игнорируется во время выполнения.