Introduction sur le mot-clé natif:
Le mot-clé natif agit comme un lien entre le langage JAVA et le morceau de code ou la bibliothèque écrite dans différents langages sauf JAVA qui peut dépendre de la machine sur laquelle vous opérez. Si le mot clé native est appliqué à une méthode, alors cela signifie que la méthode sera mise en œuvre en utilisant du code natif écrit dans un autre langage (comme C ou C++) via JNI (JAVA native interface).
Syntaxe:
La syntaxe du code natif est la même que la définition de la fonction normale avec le mot-clé « native » ajouté au début de la fonction.
Par ex:
Public class testing
{public native String testMethod (String parameter);}
Here public est un modificateur d’accès. Il doit être public pour qu’un autre fichier puisse l’utiliser. String est le type de données de retour de la fonction. Il peut être un entier, un caractère ou un booléen selon le mot-clé. Le paramètre passé à cette fonction est de type de données string également. Tout doit être gardé sous la classe.
Après la déclaration de la fonction, nous appelons cette fonction via l’objet créé et la bibliothèque chargée.
public static void main(String args)
{
System.loadLibrary(« testing »);
testing testingnew = new testing();
String output = testingnew.stringMethod(« NATIVE »);
}
La bibliothèque définie ci-dessus doit être chargée en premier et le n son objet est créé. Avec l’aide de cet objet , la fonction native est appelée.
Comment fonctionne le mot clé native ?
Il devrait y avoir deux fichiers. L’un contenant le code JAVA tandis que l’autre devrait avoir le code natif C/C++. Le code Java sera utilisé pour appeler le code hérité. Ce code hérité interagira avec le matériel et retournera la sortie attendue.
Lorsque le code hérité interagira avec le matériel alors il ne suivra pas les directives établies par JAVA. Ce code fera le traitement désiré pour obtenir la sortie et passera les résultats à JNI. L’interface native de Java vérifiera alors dans son répertoire contenant toutes les règles relatives au code natif (Cela vient sous le fichier appelé javah.exe dans le SDK). La JNI est conçue comme une partie de la boîte à outils Java. Après ce traitement, le JAVA publiera les résultats dans le langage JAVA lui-même. Lorsque nous créons un programme en JAVA, alors nous devons nous assurer qu’il y a un lien de flux de variables/données entre le fichier JAVA et le fichier patrimonial afin qu’il y ait un flux fluide de données entre les deux.
Les étapes expliquant comment faire usage des mots-clés natifs sont données ci-dessous :
- Écrire le code JAVA contenant la méthode native, la bibliothèque partagée chargée et l’enregistrer en utilisant « nom de fichier.JAVA ».
- Compiler le code JAVA et convertir le code en bytecode.
- Créer le fichier d’en-tête C/C++ contenant la signature de la fonction native qui doit être appelée.
- Ecrire le code C/C++ ayant l’implémentation de la méthode native.
- Exécuter le fichier exécutable JAVA pour voir les résultats.
Exemples pour montrer l’implémentation du mot clé natif:
Nous devrions écrire du code dans Eclipse et exécuter le code pour créer une bibliothèque en utilisant laquelle ensuite le code C sera implémenté.
Code : package com.slackerOne;
public class JPP {
public static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.loadLibrary(« JPPlibs »);
}
public void jAccess(){
JPP.pAccess();
}
public int jRead(){
return JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}
Après avoir enregistré ce code dans une nouvelle « classe » du projet java. Nous devons configurer l’environnement d’exécution pour générer le fichier d’en-tête.
Quand nous exécuterons ceci, nous devrions obtenir une bibliothèque générée.
Sortie:
Ici nous avons créé le fichier d’en-tête à partir du code java qui agira comme lien entre le code natif et le langage java.
Avantages:
- Il fournit un avantage supplémentaire à JAVA pour interagir avec le code écrit dans d’autres langues et réduire le travail pour avoir le même code écrit en JAVA, donc réduire la redondance du code.
- Il améliore la performance globale du code. Comme le code écrit dans une autre langue peut-être plus rapide quand il travaille avec le langage machine par rapport à JAVA. Nous pouvons alors utiliser le programme JAVA pour appeler ce code.
- En utilisant cette approche, nous pouvons directement donner des appels système. Réduire la probabilité d’interférences externes et améliorer la vitesse d’exécution du code.
- On peut appeler dynamiquement une bibliothèque préchargée (écrite dans un langage autre que JAVA) en utilisant un code de conduite arbitraire écrit en JAVA et toujours obtenir une réponse en JAVA.
- Rend accessible à JAVA les ressources matérielles qui sont disponibles pour être utilisées par d’autres langages seulement.
- Dans le cas où vous avez un code dépendant de la plateforme déjà construit pour votre application et dont les fonctionnalités ne sont pas supportées via JAVA dans ce cas, nous pouvons avoir un code natif et lier ce code natif à JAVA via le mot-clé natif.
Règles:
- Le mot clé native doit être utilisé avant le nom de la méthode.
- La déclaration de la méthode native n’a pas de corps et doit se terminer par un point-virgule car ces méthodes ne sont pas définies dans JAVA mais sont présentes dans le langage C/C++.
- Les méthodes natives ne peuvent pas être déclarées comme méthode abstraite.
- Puisqu’il n’y a aucune certitude si l’ancien code précédent est écrit conformément à la norme IEEE 754 (La norme IEEE pour l’arithmétique à virgule flottante est une norme technique pour l’arithmétique à virgule flottante établie en 1985 par l’Institut des ingénieurs électriques et électroniques) donc, nous ne pouvons pas déclarer ces méthodes natives comme strictftp.
- La spécification Java Native Interface (JNI) est conçue par JAVA pour définir les règles et les déclarations pour mettre en œuvre les méthodes natives, comme la conversion des types de données entre Java et le code natif.
Conclusion:
Le mot-clé native est qui comble le fossé entre les langages natifs et JAVA. Cela peut être utilisé comme un lien critique si l’interaction de notre logiciel avec le matériel est plus pour obtenir le code efficace en utilisant le code préexistant. Il rend le travail de mise en œuvre moindre par rapport à la conception d’un nouveau code d’application à partir de zéro partout où il pourrait être évité.