我知道在JAVA中"本土"是一件特别的事情.它可以做很多事情.但我现在无法阅读它.我不知道怎么...我知道它可以在JAVA中调用另一个方法.我的问题是:它可以调用私有方法吗?如果是YES,那么只在同一个班级或任何其他班级?如果它可以调用其他的,那么这是一个问题,也许它是危险的?也就是说,它打破了规则.我在哪里可以获得更多有关NATIVE的信息?谁有人给我看一个链接?
Ste*_*n C 25
该JNI程序员指南和说明书说,这在"10.9违反访问控制规则":
"JNI不会强制执行类,字段和方法访问控制限制,这些限制可以通过使用私有和最终修饰符在Java编程语言级别表达.可以编写本机代码来访问或修改字段即使在Java编程语言级别这样做也会导致
IllegalAccessException.JNI的允许性是一种有意识的设计决策,因为本机代码无论如何都可以访问和修改堆中的任何内存位置."
所以你的问题的答案是:
它可以调用私有方法吗?
是.
如果是YES,那么只在同一个班级或任何其他班级?
任何课程.
如果它可以调用其他的,那么这是一个问题,也许它是危险的?也就是说,它打破了规则.
设计者不试图强制执行正常Java访问规则的理由在上面引用的文本中有明确说明.是的,它有潜在危险,但任何使用JNI都有潜在危险.
您可以在通过 JNI 接口传递给本机方法的 Java 对象上调用私有方法。这与 Java 中调用其他 Java 对象的方法不同。您必须非常小心,因为 JNI 不强制执行通过使用 和 等修饰符表达的类、字段和方法访问控制private限制final。所以这可能很危险。例如,本机代码可以final在 JIT 编译器内联后修改类的常量字段。
以下是 JNI 文档中有关函数和指针的相关部分:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696