簡體   English   中英

為什么在使用反射時沒有非法訪問異常

[英]why no illegalAccessException on using reflection

我正在嘗試學習反思,我想解決這個問題,為什么它沒有例外?

public class FieldExceptionTest {
    private boolean b = true;

    public static void main(String[] args) throws Exception{
        FieldExceptionTest ft = new FieldExceptionTest();
        Class<?> c = ft.getClass();
        Field f = c.getDeclaredField("b");
        // f.setAccessible(true); //if i don't write this line, it also can run. 
        f.setBoolean(ft, Boolean.FALSE); 
        System.out.println(ft.b);
    }
}

為什么不拋出IllegalAccessException? 通過閱讀其他書籍,我知道如果嘗試獲取或設置私有或其他方式無法訪問的字段的值或設置最終字段的值,則可能拋出IllegalAccessException。 但是在這里,為什么呢?

當訪問“可訪問對象”(方法,構造函數,字段等)時,將進行反射的訪問檢查。 在這種情況下,您的字段是從允許訪問它的類中寫入的,因此它可以正常工作。

(順便說一句:這與Java 7方法句柄明顯不同,在Java 7方法句柄中,訪問檢查是在創建方法句柄時而不是在使用時進行的。您可以使用方法句柄來授予對您有權訪問的方法的額外訪問權限,通過將其傳遞給通常沒有這種訪問權限的其他代碼。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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