通常情况下,Java编译器会确认抛出的所有检查过的异常都在throw规范中。当本地函数抛出一个不在函数throw规范列表中的java检查异常,或者在运行时忽略抛出规范列表时,是否会发生任何特殊情况?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应在尝试捕捉。不关心,我不相信这是代码中可能存在其他错误,但它们可能并不相关)
我有点惊讶这不是重复的。 – 2012-08-01 21:37:27