我知道在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. 我可以用相同的方法調用一個方法嗎?
- 6. @compatibility_alias可以調用實例方法嗎?
- 7. 我可以從wsdl調用方法嗎?
- 8. 類方法:以私有方法傳遞私有數據字段
- 9. PHP的session_set_save_handler中的回調方法可以是私人的嗎?
- 10. 靜態方法可以訪問同一個類的私有方法嗎?
- 11. 私有方法可訪問
- 12. 可以從方法內部再次調用該方法嗎?
- 13. 可以在方法內調用方法嗎?
- 14. 我可以在Android的getView()方法中調用setContentView()方法嗎?
- 15. 靜態方法可以作爲公共方法調用嗎?
- 16. 方法可以對調用方法做出返回嗎? c#
- 17. 使javascript私有方法可以訪問它的公共方法
- 18. 有什麼辦法可以從父類調用子方法嗎?
- 19. AsyncTask調用本地方法
- 20. C#擴展方法可以訪問私有變量嗎?
- 21. Ruby類使用靜態方法調用私有方法?
- 22. 使用findVirtual調用的方法處理私有方法
- 23. 調用另一個私有方法的電源嘲諷私有方法
- 24. 可以不綁定地調用對象的成員方法嗎?
- 25. 調用私有方法問題
- 26. 調用抽象類的私有方法
- 27. 在Flex中調用私有方法,Actionscript
- 28. 在Scala中調用私有Java方法
- 29. Rails ActiveConcern調用私有方法
- 30. 在Spring中調用私有方法@PreAuthorize
[Java本地接口程序員指南和規範](http://java.sun.com/docs/books/jni/html/jniTOC.html) – Sujay
@Sujay thx!我知道了 – blackdog