El siguiente fragmento de cdigo Java define una clase llamada HelloWorld. Esta clase tiene un segmento de cdigo esttico.
class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } }
Definir un Mtodo Nativo
Todos los mtodos, tanto mtodos Java, como mtodos nativos, se deben definir dentro de una clase Java. Cuando se escribe la implementacin de un mtodo en un lenguaje de programacin distinto de Java, se debe incluir la palabra clave native como parte de la definicin del mtodo dentro de la clase java. La clave native indica al compilador Java que la funcin es una funcin en lenguaje nativo. Es sencillo decir que la implementacin del mtodo displayHelloWorld() de la clase HelloWorld est escrita en otro lenguaje de programacin porque la clave native aparece como parte de su definicin de mtodo.
public native void displayHelloWorld();
Esta definicin de mtodo en nuestra clase Java slo proporciona la firma del mtodo para displayHelloWorld(). No proporciona la implementacin para el mtodo. Se deber proporcionar la implementacin para displayHelloWorld() en un fichero fuente separado en el lenguaje nativo.
La definicin de mtodo para displayHelloWorld() tambin indica que el mtodo es un mtodo de ejemplar pblico, no acepta ningn argumento, y no devuelve ningn valor. Para ms informacin sobre los argumentos y los valores de retorno desde mtodos nativos puedes ver Programacin de Interface Nativo en Java.
Carga de la Librera
Se debe compilar el cdigo de lenguaje nativo que implementa displayHelloWorld dentro de una librera compartida (se har esto en el Paso 5: Crear una Librera Compartida). Tambin se debe cargar la librera compartida dentro de la clase Java que la requiere. Esta carga de la librera compartida dentro de la clase Java mapea la implementacin del mtodo nativo a su definicin.
Se utiliza el mtodo System.loadLibrary para cargar la librera compartida que se creo cuando compilamos la implementacin del cdigo. Este mtodo se coloca con un inicializador static. El argumento de System.loadLibrary es el nombre de la librera. El sistema utiliza un estndard, pero especfico de la plataforma, para convertir el nombre de la librera a un nombre de librera nativo. Por ejemplo, en Solaris convierte el nombre "hello" a libhello.so, mientras que en Win32 convierte el mismo nombre de librera a hello.dll.
El siguiente inicializador static de la clase HelloWorld carga la librera apropiada, llamada hello. El sistema de ejecucin ejecuta un inicializador esttico cuando carga la clase.
static { System.loadLibrary("hello"); }
Crear el Programa Principal
Tambin se debe crear un fichero fuente separado con una aplicacin Java que ejemplarize la clase que contiene la definicin de mtodo nativo. Esta aplicacin Java tambin llamar al mtodo nativo. Como es una aplicacin, debe tener un mtodo main. En un fichero fuente separado, que para este ejemplo hemos llamado Main.java, se crea una aplicacin Java que ejemplariza HelloWorld y llama al mtodo nativo displayHelloWorld().
class Main { public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } }
Como se puede ver a partir del cdigo anterior, se llama a un mtodo nativo de la misma forma en que se llamara a un mtodo normal: slo aadir el nombre del mtodo al final del nombre del objeto, separado con un punto ('.'). Una pareja de parntesis, ( ), sigue al nombre del mtodo y encierra los argumentos. El mtodo displayHelloWorld() no tiene ningn argumento.