[英]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.