簡體   English   中英

Java檢查異常不在函數的throw規范中?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM