2012-08-31 25 views
6

Sabía que en JAVA "nativo" es algo especial. Puede hacer muchas cosas. Pero no puedo leerlo ahora. No sé cómo ... Sabía que puede llamar a otro Mathod en JAVA. Mi pregunta es: ¿puede llamar a un método privado? si es un SÍ, entonces solo en la misma clase o en cualquier otra clase? si puede llamar a los demás, ¿es un problema que tal vez sea peligroso? es decir, rompió las reglas. ¿Dónde puedo obtener más información sobre NATIVE? ¿Alguien puede mostrarme un enlace?¿Puede un método nativo llamar a un método privado?

+0

[La guía y la especificación del programador de la interfaz nativa de Java] (http://java.sun.com/docs/books/jni/html/jniTOC.html) – Sujay

+0

@Sujay thx! Entiendo – blackdog

Respuesta

16

El JNI Programmer's Guide and Specification dice esto en "10.9 violar las reglas de control de acceso":

"El JNI no hace cumplir la clase, campo y restricciones de control de acceso a métodos que se pueden expresar en el nivel de lenguaje de programación Java mediante el uso de modificadores como privado y final. Es posible escribir código nativo para acceder o modificar campos de un objeto aunque lo haga en Java el nivel de lenguaje de programación daría lugar a una n IllegalAccessException. . Permisividad de JNI fue una decisión de diseño consciente, teniendo en cuenta que el código nativo puede acceder y modificar cualquier posición de memoria en el montón de todos modos"

Así que las respuestas a sus preguntas son:

¿Puede llamar a una método privado?

Sí.

si es un SI, entonces sólo en los s ame clase o cualquier otra clase?

Cualquier clase.

si puede llamar a los demás, entonces ¿es un problema que tal vez es peligroso? es decir, rompió las reglas.

La lógica de los diseñadores para no intentar hacer cumplir las reglas normales de acceso de Java se indica claramente en el texto citado anteriormente. Sí, es potencialmente peligroso, pero cualquier uso de JNI es potencialmente peligroso.

3

Puede llamar a métodos privados en un objeto Java que se pasa a un método nativo a través de la interfaz JNI. No es lo mismo que en Java, llamando a métodos en otros objetos Java. Tiene que ser muy cuidadoso porque JNI no impone restricciones de control de acceso de clase, campo y método que se expresan mediante el uso de modificadores como private y final. Entonces puede ser peligroso. Por ejemplo, el código nativo puede modificar un campo constante final de una clase, después de que el compilador JIT lo haya insertado.

Aquí está la sección correspondiente de la documentación JNI relativos a las funciones y los punteros: http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696

Cuestiones relacionadas