[英]Java checked exception not in the function's throw specification?
通常,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中。不关心,我不相信它与问题有关。代码中可能还有其他错误,但它们可能不相关无论是。)
您甚至不必使用本机代码来欺骗已检查的异常机制。 请参阅Thread.stop上的Javadoc(Throwable) 。 我曾经一直想知道我的代码是如何在没有声明它的代码中间抛出InterruptedException
的。 我当时甚至没有找到答案,但现在我知道:)
回答您的直接问题:是的,已检查的异常逻辑是仅编译器的功能,在运行时被忽略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.