## Paso 1: Escribir el Código Java

El siguiente fragmento de código Java define una clase llamada HelloWorld. Esta clase tiene un segmento de código estático:

    class HelloWorld {
        public native void displayHelloWorld();

        static {
            System.loadLibrary("hello");
        }
    }

#### Definir un Método Nativo

> Todos los métodos, tanto métodos Java, como métodos nativos, se deben definir dentro de una clase Java. Cuando se escribe la implementación de un método en un lenguaje de programación distinto de Java, se debe incluir la palabra clave native como parte de la definición del método dentro de la clase java. La clave native indica al compilador Java que la función es una función en lenguaje nativo. Es sencillo decir que la implementación del método displayHelloWorld() de la clase HelloWorld está escrita en otro lenguaje de programación porque la clave native aparece como parte de su definición de método:

>     public native void displayHelloWorld();

> Esta definición de método en nuestra clase Java sólo proporciona la firma del método para displayHelloWorld(). No proporciona la implementación para el método. Se deberá proporcionar la implementación para displayHelloWorld() en un fichero fuente separado en el lenguaje nativo.

> La definición de método para displayHelloWorld() también indica que el método es un método de ejemplar público, no acepta ningún argumento, y no devuelve ningún valor. Para más información sobre los argumentos y los valores de retorno desde métodos nativos puedes ver Programación de Interface Nativo en Java.

#### Carga de la Librería

> Se debe compilar el código de lenguaje nativo que implementa displayHelloWorld dentro de una librería compartida (se hará esto en el Paso 5: Crear una Librería Compartida). También se debe cargar la librería compartida dentro de la clase Java que la requiere. Esta carga de la librería compartida dentro de la clase Java mapea la implementación del método nativo a su definición.

> Se utiliza el método System.loadLibrary para cargar la librería compartida que se creo cuando compilamos la implementación del código. Este método se coloca con un inicializador static. El argumento de System.loadLibrary es el nombre de la librería. El sistema utiliza un estándard, pero específico de la plataforma, para convertir el nombre de la librería a un nombre de librería nativo. Por ejemplo, en Solaris convierte el nombre "hello" a libhello.so, mientras que en Win32 convierte el mismo nombre de librería a hello.dll.

> El siguiente inicializador static de la clase HelloWorld carga la librería apropiada, llamada hello. El sistema de ejecución ejecuta un inicializador estático cuando carga la clase.

>     static {
>         System.loadLibrary("hello");
>     }

#### Crear el Programa Principal

> También se debe crear un fichero fuente separado con una aplicación Java que ejemplarize la clase que contiene la definición de método nativo. Esta aplicación Java también llamará al método nativo. Como es una aplicación, debe tener un método main. En un fichero fuente separado, que para este ejemplo hemos llamado Main.java, se crea una aplicación Java que ejemplariza HelloWorld y llama al método nativo displayHelloWorld().

>     class Main {
>         public static void main(String[] args) {
>             new HelloWorld().displayHelloWorld();
>         }
>     }

> Como se puede ver a partir del código anterior, se llama a un método nativo de la misma forma en que se llamaría a un método normal: sólo añadir el nombre del método al final del nombre del objeto, separado con un punto ('.'). Una pareja de paréntesis, ( ), sigue al nombre del método y encierra los argumentos. El método displayHelloWorld() no tiene ningún argumento.

Ozito