2012-08-31 50 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

相关问题