Maison >Java >javaDidacticiel >Méthodes natives en Java

Méthodes natives en Java

PHPz
PHPzoriginal
2024-08-30 15:41:22531parcourir

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.

Comment fonctionne la méthode native en Java ?

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 :

  • javah : Cet outil est disponible dans le kit de développement java qui crée des fichiers d'en-tête compatibles avec le C à partir d'un fichier java classe java existant contenant des méthodes natives.
  • h : Il s'agit d'un fichier d'en-tête basé sur C/C++ disponible dans le kit de développement Java qui fournit un mappage entre les types de données Java et les types de données natifs. Le fichier Javah décrit ci-dessus génère ce fichier automatiquement.

Exemples de méthodes natives en 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 :

  • Programmer le code Java.
  • Compilez le code Java.
  • Créez un fichier d'en-tête C.
  • Implémentez la logique de méthode native en C/C++.
  • Créez une bibliothèque partagée.
  • Exécuter et tester des applications Java.

L'exemple ci-dessous sera divisé en deux parties : avoir du code java et avoir du code natif.

Partie n°1 : Java

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.

Méthodes natives en Java

Dans l'étape suivante, nous créerons un fichier d'en-tête à l'aide de l'utilitaire javah comme décrit ci-dessous.
Méthodes natives en Java

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.

Partie n°2 : Code C

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
}
  • Les fichiers ci-dessus sont enregistrés avec NativeDemo.c.
  • À partir du code ci-dessus, nous pouvons voir que la logique du cryptage est écrite en langage C. La logique est basée sur le remplacement de toutes les voyelles par @ et le renvoi de la chaîne.
  • Dans l'étape suivante, nous compilerons le code C ci-dessus à l'aide de la commande ci-dessous :

Méthodes natives en Java

  • La commande ci-dessus crée une bibliothèque partagée utilisée par la couche de programmation Java pour appeler du code écrit en C. Nous pouvons utiliser différentes stratégies de compilation basées sur notre compilateur et notre système d'exploitation.
  • Après avoir terminé les étapes ci-dessus, nous pouvons appeler notre code Java comme ci-dessous :

Méthodes natives en Java

Si tout se passe bien, vous verrez le résultat ci-dessous :

Méthodes natives en Java

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Java mutable ou immuableArticle suivant:Java mutable ou immuable