本机方法可以调用私有方法吗?

我知道在JAVA中“本土”是一件特别的事。 它可以做很多事情。 但我现在无法阅读它。 我不知道怎么…我知道它可以调用JAVA中的其他方法。 我的问题是:它可以调用私有方法吗? 如果是YES,那么只在同一个class级或任何其他class级? 如果它可以调用其他的,那么这是一个问题,也许它是危险的? 也就是说,它打破了规则。 我在哪里可以获得更多关于NATIVE的信息? 任何人都可以给我一个链接吗?

JNI程序员指南和规范在“10.9违反访问控制规则”中说明了这一点:

“JNI不会强制执行类,字段和方法访问控制限制,这些限制可以通过使用私有和最终修饰符在Java编程语言级别表达。可以编写本机代码来访问或修改字段尽管在Java编程语言级别这样做会导致IllegalAccessException的允许性是一种有意识的设计决定,因为本机代码无论如何都可以访问和修改堆中的任何内存位置。“

所以你的问题的答案是:

它可以调用私有方法吗?

是。

如果是YES,那么只在同一个class级或任何其他class级?

任何课程。

如果它可以调用其他的,那么这是一个问题,也许它是危险的? 也就是说,它打破了规则。

设计者不试图强制执行正常Java访问规则的理由在上面引用的文本中有明确说明。 是的,它有潜在危险,但任何使用JNI都有潜在危险。

您可以在通过JNI接口传递给本机方法的Java对象上调用私有方法。 它与Java内部不同,在其他Java对象上调用方法。 您必须非常小心,因为JNI不会强制执行通过使用privatefinal修饰符表示的类,字段和方法访问控制限制。 所以它可能很危险。 例如,在JIT编译器内联之后,本机代码可以修改类的final常量字段。

以下是有关函数和指针的JNI文档的相关部分: http : //docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696