web-dev-qa-db-fra.com

Quelles sont les méthodes natives dans Java et où doivent-elles être utilisées?

Une méthode native a la même syntaxe qu'une méthode abstraite, mais où est-elle implémentée?

70
niks

Quelles sont les méthodes natives dans Java et où doivent-elles être utilisées?

Une fois que vous voyez un petit exemple, cela devient clair:

Main.Java :

public class Main {
    public native int intMethod(int i);
    public static void main(String[] args) {
        System.loadLibrary("Main");
        System.out.println(new Main().intMethod(2));
    }
}

Main.c :

#include <jni.h>
#include "Main.h"

JNIEXPORT jint JNICALL Java_Main_intMethod(
    JNIEnv *env, jobject obj, jint i) {
  return i * i;
}

Compilez et exécutez :

javac Main.Java
javah -jni Main
gcc -shared -fpic -o libMain.so -I${Java_HOME}/include \
  -I${Java_HOME}/include/linux Main.c
Java -Djava.library.path=. Main

Sortie :

4

Testé sur Ubuntu 14.04 avec Oracle JDK 1.8.0_45.

Il est donc clair que cela vous permet de:

  • appeler une bibliothèque compilée chargée dynamiquement (ici écrite en C) avec un code Assembly arbitraire à partir de Java
  • et obtenir des résultats en Java

Cela pourrait être utilisé pour:

  • écrire du code plus rapide sur une section critique avec de meilleures instructions d'assemblage de la CPU (non portable)
  • faire des appels système directs (pas portable OS)

avec le compromis de la portabilité inférieure.

Vous pouvez également appeler Java à partir de C, mais vous devez d'abord créer une machine virtuelle Java dans C: Comment appeler Java C++?

Exemple sur GitHub pour vous permettre de jouer.

La méthode est implémentée en code "natif". C'est-à-dire du code qui ne s'exécute pas dans la machine virtuelle Java. Il est généralement écrit en C ou C++.

Les méthodes natives sont généralement utilisées pour établir une interface avec des appels système ou des bibliothèques écrites dans d'autres langages de programmation.

45
Laurence Gonsalves

J'aime savoir où utilisons-nous les méthodes natives

Idéalement pas du tout. En réalité, certaines fonctionnalités ne sont pas disponibles dans Java et vous devez appeler du code C.).

Les méthodes sont implémentées en code C.

15
Peter Lawrey

Nécessité du code natif Java:

  • h/w accès et contrôle.
  • utilisation de services commerciaux et de services système [liés au h/w].
  • utilisation de s/w hérités qui n’ont pas ou ne peuvent pas être portés en Java.
  • Utilisation de code natif pour effectuer des tâches critiques.

espérons que ces points répondent à votre question :)

6
Cjo

Les méthodes natives vous permettent d’utiliser du code provenant d’autres langages tels que C ou C++ dans votre code Java. Vous les utilisez lorsque Java ne fournit pas la fonctionnalité Par exemple, si j’écrivais un programme pour calculer une équation et en créer un graphique linéaire, j’utiliserais Java, car c’est le langage dans lequel je maîtrise le mieux. Cependant, je maîtrise également C. Say in Une partie de mon programme nécessite de calculer une équation très complexe et d’utiliser une méthode native, car je connais un peu le C++ et je sais que C++ est beaucoup plus rapide que Java, donc si j’écrivais ma méthode en C++, ce serait plus rapide. En outre, disons que je souhaite interagir avec un autre programme ou un autre périphérique, ce qui utiliserait également une méthode native, car C++ possède un pointeur, qui me permettrait de le faire.

4
Zac