native
est un mot-clé java. Il marque une méthode, qu’elle sera implémentée dans d’autres langages, et non en Java. La méthode est déclarée sans corps et ne peut pas être abstract
. Il fonctionne conjointement avec JNI (Java Native Interface).
Syntaxe:
method();
Les méthodes natives étaient utilisées dans le passé pour écrire des sections critiques en termes de performance, mais avec java devenant plus rapide, cela est maintenant moins commun. Les méthodes natives sont actuellement nécessaires lorsque
- Vous devez appeler depuis java une bibliothèque, écrite dans un autre langage.
- Vous devez accéder à des ressources système ou matérielles qui ne sont atteignables que depuis l’autre langage (typiquement le C). En fait, de nombreuses fonctions système qui interagissent avec l’ordinateur réel (entrées-sorties disque et réseau, par exemple) ne peuvent le faire que parce qu’elles appellent du code natif.
Pour compléter l’écriture d’une méthode native, vous devez traiter votre classe avec l’outil javah
qui va générer un code d’en-tête en C. Vous devez ensuite fournir une implémentation du code d’en-tête, produire une bibliothèque dynamiquement chargeable (.so
sous Linux, .dll
sous Windows) et la charger (dans le cas le plus simple avec System.load(library_file_name)
. La complétion du code est triviale si seuls des types primitifs comme les entiers sont passés mais devient plus complexe s’il faut échanger des chaînes de caractères ou des objets du code C. En général, tout peut être au niveau du C, y compris la création des nouveaux objets et le rappel des méthodes, écrites en java.
Pour appeler le code dans un autre langage (y compris C++), il faut écrire un pont du C vers ce langage. C’est généralement trivial car la plupart des langages sont appelables depuis le C.
.