【发布时间】:2012-07-30 18:44:09
【问题描述】:
通常,Java 编译器会确认所有抛出的检查异常都在 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 中。不要在意,我不认为它与问题有关。代码中可能还有其他错误,但它们是可能也不相关。)
【问题讨论】:
-
我有点惊讶这不是重复的。
标签: java exception java-native-interface throws