La palabra clave y los métodos nativos de Java

1. Información general

En este tutorial rápido, discutiremos el concepto de la palabra clave nativa en Java y también mostraremos cómo integrar métodos nativos en el código Java.

2. La palabra clave nativa en Java

En primer lugar, analicemos qué es una palabra clave nativa en Java.

En pocas palabras, este es un modificador de no acceso que se utiliza para acceder a métodos implementados en un lenguaje que no sea Java como C / C ++ .

Indica la implementación dependiente de la plataforma de un método o código y también actúa como una interfaz entre JNI y otros lenguajes de programación.

3. métodos nativos

Un método nativo es un método Java (ya sea un método de instancia o un método de clase) cuya implementación también está escrita en otro lenguaje de programación como C / C ++.

Además, un método marcado como nativo no puede tener cuerpo y debe terminar con un punto y coma:

[ public | protected | private] native [return_type] method ();

Podemos usarlos para:

  • implementar una interfaz con llamadas al sistema o bibliotecas escritas en otros lenguajes de programación
  • acceder a los recursos del sistema o del hardware a los que solo se puede acceder desde el otro idioma
  • integrar código heredado ya existente escrito en C / C ++ en una aplicación Java
  • llamar a una biblioteca compilada cargada dinámicamente con código arbitrario de Java

4. Ejemplos

Ahora demostremos cómo integrar estos métodos en nuestro código Java.

4.1. Acceder al código nativo en Java

Primero que nada, creemos una clase DateTimeUtils que necesita acceder a un método nativo dependiente de la plataforma llamado getSystemTime :

public class DateTimeUtils { public native String getSystemTime(); // ... }

Para cargarlo, usaremos System.loadLibrary.

Coloquemos la llamada para cargar esta biblioteca en un bloque estático para que esté disponible en nuestra clase:

public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); } }

Hemos creado una biblioteca de vínculos dinámicos, nativedatetimeutils , que implementa getSystemTime en C ++ usando instrucciones detalladas cubiertas en nuestra guía del artículo de JNI.

4.2. Prueba de métodos nativos

Finalmente, veamos cómo podemos probar los métodos nativos definidos en la clase DateTimeUtils :

public class DateTimeUtilsManualTest { @BeforeClass public static void setUpClass() { // .. load other dependent libraries System.loadLibrary("nativedatetimeutils"); } @Test public void givenNativeLibsLoaded_thenNativeMethodIsAccessible() { DateTimeUtils dateTimeUtils = new DateTimeUtils(); LOG.info("System time is : " + dateTimeUtils.getSystemTime()); assertNotNull(dateTimeUtils.getSystemTime()); } }

A continuación se muestra la salida del registrador:

[main] INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018

Como podemos ver, con la ayuda de la palabra clave nativa , podemos acceder con éxito a una implementación dependiente de la plataforma escrita en otro idioma (en nuestro caso C ++).

5. Conclusión

En este artículo, hemos aprendido los conceptos básicos de las palabras clave y los métodos nativos . Con un ejemplo rápido, también hemos aprendido a integrarlos en Java.

Los fragmentos de código utilizados en este artículo están disponibles en Github.