2012-08-31 51 views
6

我知道在JAVA中「native」是一件特別的事情。它可以做很多事情。但我現在無法閱讀。我不知道如何...我知道它可以調用JAVA中的其他方法。我的問題是:它可以調用私有方法嗎?如果是「是」,那麼只能在同一個班級或任何其他班級中使用?如果可以打電話給他人,那麼這可能是危險的嗎?那就是,它違反了規則。我在哪裏可以獲得更多關於NATIVE的信息?任何人都可以給我看鏈接嗎?本地方法可以調用私有方法嗎?

+0

[Java本地接口程序員指南和規範](http://java.sun.com/docs/books/jni/html/jniTOC.html) – Sujay

+0

@Sujay thx!我知道了 – blackdog

回答

16

JNI Programmer's Guide and Specification說,這在「10.9違反訪問控制規則」:

「的JNI不強制類,字段和方法訪問控制限制,這些限制可以通過使用修飾符(如private和final)在Java編程語言級別表達,可以編寫本地代碼來訪問或修改對象的字段,即使在Java中這樣做也是如此編程語言級別會導致一個n IllegalAccessException。 。JNI的寬容是一種有意識的設計決定的,因爲原生代碼可在堆反正訪問和修改任何存儲位置」

因此,問題的答案是:

它可以調用私有方法?

是。

如果是YES,那麼只有在S ame課程還是其他課程?

任何一類。

如果它可以打電話給他人,那麼這可能是一個危險的問題嗎?那就是,它違反了規則。

上面引用的文字清楚地說明了設計者不試圖執行正常Java訪問規則的基本原理。是的,它是潛在的危險,但任何使用JNI是潛在的危險。

3

您可以調用通過JNI接口傳遞給本機方法的Java對象的私有方法。它與Java內部不同,在其他Java對象上調用方法。您必須非常小心,因爲JNI不強制通過使用修飾符(例如privatefinal)表達的類,字段和方法訪問控制限制。所以它可能是危險的。例如,在JIT編譯器將其內聯後,本機代碼可以修改類的常量字段。

下面是關於函數指針和JNI的文檔的相關部分:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696

相關問題