我知道在JAVA中「native」是一件特別的事情。它可以做很多事情。但我現在無法閱讀。我不知道如何...我知道它可以調用JAVA中的其他方法。我的問題是:它可以調用私有方法嗎?如果是「是」,那麼只能在同一個班級或任何其他班級中使用?如果可以打電話給他人,那麼這可能是危險的嗎?那就是,它違反了規則。我在哪裏可以獲得更多關於NATIVE的信息?任何人都可以給我看鏈接嗎?本地方法可以調用私有方法嗎?
6
A
回答
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不強制通過使用修飾符(例如private
和final
)表達的類,字段和方法訪問控制限制。所以它可能是危險的。例如,在JIT編譯器將其內聯後,本機代碼可以修改類的常量字段。
下面是關於函數指針和JNI的文檔的相關部分:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696
相關問題
- 1. 私有方法調用另一個私有方法,做對嗎?
- 2. 我可以使用私人方法嗎?
- 3. 可以攔截私人方法嗎?
- 4. 反射和私有本地方法
- 5. @compatibility_alias可以調用實例方法嗎?
- 6. 我可以從wsdl調用方法嗎?
- 7. PHP的session_set_save_handler中的回調方法可以是私人的嗎?
- 8. 私有方法可訪問
- 9. 可以在方法內調用方法嗎?
- 10. 方法可以對調用方法做出返回嗎? c#
- 11. 我可以在Android的getView()方法中調用setContentView()方法嗎?
- 12. 有什麼辦法可以從父類調用子方法嗎?
- 13. AsyncTask調用本地方法
- 14. 使用findVirtual調用的方法處理私有方法
- 15. C#擴展方法可以訪問私有變量嗎?
- 16. 在rails中調用私有方法?
- 17. EasyMock的期望私有方法調用
- 18. Rails ActiveConcern調用私有方法
- 19. 調用抽象類的私有方法
- 20. 從__callStatic調用私有靜態方法
- 21. 在Ruby中調用的私有方法
- 22. ActionView的私有方法調用異常
- 23. 在Flex中調用私有方法,Actionscript
- 24. searchBarCancelButtonClicked委託方法未被調用。有什麼方法可以打電話嗎?
- 25. Rhino Mocks驗證私有方法是從公共方法調用
- 26. 從Ruby的類方法調用私有實例方法
- 27. Python:公共方法調用他們的'兄弟'私有方法
- 28. 兩種公開方法調用私有方法
- 29. 從靜態方法調用私有方法
- 30. 從公共方法調用私有方法?
[Java本地接口程序員指南和規範](http://java.sun.com/docs/books/jni/html/jniTOC.html) – Sujay
@Sujay thx!我知道了 – blackdog