Maison >Java >javaDidacticiel >Méthodes natives en Java
Dans cet article, nous verrons une explication détaillée des méthodes natives en Java. Nous en verrons la syntaxe de base ainsi que leur fonctionnement. Il y aura des exemples de code Java montrant l'utilisation de méthodes natives.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Voici une syntaxe de base sur la façon dont les méthodes natives sont utilisées en Java :
[ public / protected / private] native [return-type] methodName ();
La syntaxe ci-dessus montre comment une méthode native est déclarée en Java. Semblable à une méthode classique, elle nécessite la définition d'un modificateur d'accès, suivi du mot-clé natif, puis du type de retour de la méthode et enfin du nom de la méthode avec tous les paramètres d'entrée nécessaires spécifiés.
Nous pouvons le définir comme des méthodes implémentées dans des langages autres que Java, tels que C/C++. L'idée générale derrière l'utilisation de telles méthodes peut être de tirer parti des hautes performances ou de la gestion de la mémoire disponibles en C/C++.
Pour prendre en charge les méthodes écrites dans d'autres langages, Java fournit une interface appelée Java Native Interface, qui agit comme médiateur entre Java et d'autres langages. La motivation pour utiliser JNI vient de sa capacité à fournir du code réutilisable et des performances élevées. Notez que le code écrit dans d'autres langages comme C/C++ n'est pas portable.
Voici les principaux composants de l'interface native Java :
Nous allons maintenant voir un exemple qui comprend clairement le fonctionnement des méthodes natives en Java. Voici les étapes à suivre pour utiliser des méthodes natives :
L'exemple ci-dessous sera divisé en deux parties : avoir du code java et avoir du code natif.
Voici notre classe java contenant la méthode native.
Code :
package com.edubca.nativedemo; class NativeDemo { public native String encryptData (String inputdata); static { System.loadLibrary ("nativedemo"); /* lowercase of classname! */ } public static void main (String[] args) { NativeDemo demo = new NativeDemo (); System.out.println("Encrypted data is " + demo.encryptData ("This is Edubca")); } }
L'exemple ci-dessus contient une méthode native déclarée dans la classe NativeDemo. Nous avons écrit l'implémentation de la méthode encryptData en C. Comme vous pouvez le constater, nous avons utilisé un bloc statique dont le but est de charger la bibliothèque native C dans laquelle l'implémentation de la méthode encryptData est disponible. Une remarque importante est que vous devez fournir le nom en minuscules de la classe Java englobante comme paramètre de chaîne dans la méthode System.loadLibrary. Selon les étapes déclarées ci-dessus, il est temps de compiler notre code Java.
La commande suivante compile le code Java ci-dessus.
Dans l'étape suivante, nous créerons un fichier d'en-tête à l'aide de l'utilitaire javah comme décrit ci-dessous.
La commande ci-dessus générera un fichier javah avec le même nom que le nom de la classe. Lors de l'écriture de l'implémentation C de la méthode native, vous devez inclure ce fichier.
Voici l'implémentation C de la fonction native encryptData.
Code :
#include <jni.h> #include <stdio.h> #include "NativeDemo.h" JNIEXPORT void JNICALL Java_NativeDemo_encryptData(JNIEnv *env, jobject obj, jstring inputstr) { const char *str= (*env)->GetStringUTFChars(env,inputstr,0) // create string from jstring char Newch = '@'; for(i = 0; i <= strlen(str); i++) { if(str[i] == 'a' || str[i]== 'e' || str[i]== 'i' || str[i]== 'o' || str[i]== 'u' || str[i] == 'A' || str[i]== 'E' || str[i]== 'I' || str[i]== 'O' || str[i]== 'U') { str[i] = Newch; } } return env->NewStringUTF(str); // convert string to jstring }
Si tout se passe bien, vous verrez le résultat ci-dessous :
D'après l'article ci-dessus, nous en avons une compréhension claire. La plupart des applications temps réel écrites en Java utilisent des méthodes natives pour bénéficier des avantages en termes de performances ainsi que de gestion de la mémoire disponibles dans les langages de programmation natifs comme C/C++.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!