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

通常,Java编译器确认抛出的所有检查的异常都在throw规范中.当本机函数抛出不在函数throw规范列表中的java检查异常,或者是在运行时简单忽略的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();
        }        
    }
}

(C函数名称可能会被破坏,而且loadLibrary应该是一个try catch,不要在意,我不认为这与问题有关,代码中可能还有其他错误,但是它们可能不相关无论是.)

解决方法

你甚至不用诉诸本地代码来愚弄被检查的异常机制.看到 Javadoc on Thread.stop(Throwable).我一直在想,整个一天,我的代码如何在没有声明的代码中间抛出一个InterruptedException.我甚至没有找到答案,但现在我知道:)

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...