L'utilisation du modificateur Native
native est principalement utilisée pour les méthodes
1. Une méthode native est une interface permettant à Java d'appeler du code non Java. Une méthode native signifie que l'implémentation de la méthode est implémentée dans un langage non Java, tel que C ou C++.
2. Lors de la définition d'une méthode native, le corps d'implémentation n'est pas fourni (plus comme la définition d'une interface Java), car son corps d'implémentation est implémenté en externe par un langage non Java.
Explication
Le langage Java lui-même ne peut pas accéder et faire fonctionner la couche inférieure du système d'exploitation, mais il peut appeler d'autres langages via l'interface JNI pour accéder à la couche inférieure.
JNI est Java Native Interface, une interface de programmation native, qui fait partie du Java Software Development Kit (SDK). JNI permet au code Java d'utiliser du code et des bibliothèques de codes écrits dans d'autres langages.
L'API d'invocation (qui fait partie de JNI) peut être utilisée pour intégrer la machine virtuelle Java (JVM) dans des applications natives, permettant aux programmeurs d'appeler du code Java à partir du code natif.
Exemple
Dans le code source du JDK, prenez system.class comme exemple Puisque les méthodes pertinentes du système d'exploitation sont appelées et que l'opération n'est pas implémentée en Java, il y aura de nombreuses méthodes de modification natives
Modification native À quoi sert cette méthode
J'ai accidentellement regardé le code aujourd'hui et j'ai découvert que quelqu'un d'autre l'avait écrit de cette façon, et il y avait plusieurs fichiers dll dans le pot, ce qui était assez étrange, alors j'ai ouvert le code et j'ai trouvé la méthode d'écriture suivante.
public native String GSMModemSMSReadAll(String s, int i); public native String GSMModemGetErrorMsg(String s); public native boolean GSMModemIsConn(String s);
Je trouve que c'est assez intéressant. J'ai cherché des informations sur Internet et ça fait du bien. Une autre méthode d'utilisation de Java pour appeler d'autres langues (je ne la connaissais pas avant -_#)
J'ai passé deux heures aujourd'hui à lire un article en anglais sur ce qu'est la méthode native. Ce qui suit est ma compréhension basée sur l'original. texte. .
Qu'est-ce que la méthode native
En termes simples, une méthode native est une interface permettant à Java d'appeler du code non-java. Une méthode native est une méthode Java dont l'implémentation est implémentée dans un langage non Java, tel que C. Cette fonctionnalité n'est pas propre à Java. De nombreux autres langages de programmation disposent de ce mécanisme. Par exemple, en C++, vous pouvez utiliser extern "C" pour indiquer au compilateur C++ d'appeler une fonction C.
"Une méthode native est une méthode Java dont l'implémentation est assurée par du code non-java."
Lors de la définition d'une méthode native, elle ne fournit pas de corps d'implémentation (un peu comme définir une interface Java), car son implémentation body Il est implémenté en externe par des langages non Java. , un exemple est donné ci-dessous :
public class IHaveNatives {undefined native public void Native1( int x ) ; native static public long Native2() ; native synchronized private float Native3( Object o ) ; native void Native4( int[] ary ) throws Exception ; }
La déclaration de ces méthodes décrit à quoi ressemble certains codes non-java dans ces codes java (vue
L'identifiant natif peut être utilisé avec tous les autres identifiants java, sauf abstrait). . C'est raisonnable, car native implique que ces méthodes ont des implémentations, mais ces implémentations ne sont pas Java, mais abstract indique clairement que ces méthodes n'ont aucune implémentation. Lorsque native est utilisée avec d'autres identifiants Java, sa signification n'est pas différente de celle d'une méthode non native. Par exemple, native static indique que cette méthode peut être appelée directement sans générer d'instance de classe, par exemple. vous souhaitez utiliser une méthode native pour l’appeler une bibliothèque de classes C. La troisième méthode ci-dessus utilise la synchronisation native. La JVM exécutera un mécanisme de verrouillage de synchronisation avant d'entrer dans l'implémentation de cette méthode (tout comme le multi-threading de Java.)
Une méthode native peut renvoyer n'importe quel type Java, y compris les types non basiques, et un contrôle des exceptions peut également être effectué. L'implémentation de ces méthodes peut créer une exception et la lever, ce qui est très similaire aux méthodes Java. Lorsqu'une méthode native reçoit des types non basiques tels qu'un objet ou un tableau d'entiers, la méthode peut accéder aux éléments internes de ces types non basiques, mais cela rendra la méthode native dépendante de l'implémentation de la classe Java à laquelle vous accédez. Une chose à garder à l'esprit est que nous pouvons accéder à toutes les fonctionnalités Java dans une implémentation native d'une méthode native, mais cela dépend de l'implémentation des fonctionnalités Java auxquelles vous accédez, et cela est bien inférieur à l'utilisation de celles du langage Java. Les fonctionnalités sont pratiques et simples.
L'existence de méthodes natives n'aura aucun impact sur les autres classes appelant ces méthodes natives. En fait, les autres classes appelant ces méthodes ne savent même pas qu'elles appellent une méthode native. La JVM contrôlera tous les détails de l’appel des méthodes natives. Nous devons faire attention à la situation lorsque nous déclarons une méthode locale comme définitive. Les corps de méthodes implémentés en Java peuvent connaître des améliorations d'efficacité grâce à l'intégration lors de leur compilation. Cependant, on peut se demander si une méthode finale native peut également obtenir de tels avantages, mais il ne s'agit que d'un problème d'optimisation du code et n'a aucun impact sur l'implémentation fonctionnelle.
Si une classe contenant une méthode locale est héritée, la sous-classe héritera de la méthode locale et pourra remplacer cette méthode en langage Java (cela semble un peu étrange) De même, si une méthode locale est marquée par fianl, elle est héritée. ne peut pas être écrasé ultérieurement.
Les méthodes locales sont très utiles car elles étendent efficacement le jvm.En fait, le code java que nous écrivons a déjà utilisé des méthodes locales. Dans la mise en œuvre du mécanisme de concurrence java (multi-threading) de Sun, de nombreux contacts avec le système d'exploitation sont des méthodes locales. utilisé à tous les points, ce qui permet aux programmes Java de transcender les limites du runtime Java. Avec les méthodes natives, un programme Java peut effectuer n’importe quelle tâche au niveau de l’application.
Pourquoi utiliser la méthode native
Java est très pratique à utiliser, mais certains niveaux de tâches ne sont pas faciles à implémenter en Java, ou lorsque l'on est très préoccupé par l'efficacité du programme, des problèmes surviennent.
Interaction avec l'extérieur de l'environnement Java : Parfois, les applications Java doivent interagir avec l'environnement extérieur à Java. C'est la principale raison pour laquelle les méthodes locales existent. Vous pouvez penser à la situation dans laquelle Java doit échanger des informations avec certains systèmes sous-jacents tels que le système d'exploitation ou certains matériels. Les méthodes locales sont exactement un tel mécanisme de communication : elles nous fournissent une interface très simple, et nous n'avons pas besoin de comprendre les détails fastidieux en dehors de l'application Java.
Interagir avec le système d'exploitation : JVM prend en charge le langage Java lui-même et la bibliothèque d'exécution. C'est la plateforme sur laquelle s'appuient les programmes Java. Elle se compose d'un interpréteur (interprétant le bytecode) et de quelques bibliothèques connectées au code natif. Cependant, ce n’est pas un système complet après tout. Il repose souvent sur le support de certains systèmes sous-jacents. Ces systèmes sous-jacents sont souvent des systèmes d’exploitation puissants. En utilisant des méthodes natives, nous pouvons utiliser Java pour réaliser l'interaction entre jre et le système sous-jacent. Même certaines parties de la JVM sont écrites en C. De plus, si nous voulons utiliser certaines fonctionnalités du système d'exploitation que le langage Java lui-même fait. ne fournit pas d'encapsulation, nous devons également utiliser des méthodes natives.
Java de Sun : L'interpréteur de Sun est implémenté en C, ce qui le fait interagir avec l'extérieur comme un C ordinaire. La plupart des jre sont implémentés en Java et interagissent également avec le monde extérieur via certaines méthodes locales. Par exemple : la méthode setPriority() de la classe java.lang.Thread est implémentée en java, mais elle appelle la méthode locale setPriority0() dans la classe. Cette méthode native est implémentée en C et implantée dans la JVM. Sur la plateforme Windows 95, cette méthode native appellera à terme l'API Win32 SetPriority(). Il s'agit d'une implémentation spécifique d'une méthode locale fournie directement par la JVM. Le plus souvent, la méthode locale est fournie par une bibliothèque de liens dynamiques externe (external Dynamic Link Library) puis appelée par la JVM.
Comment JVM fait fonctionner la méthode native
Nous savons que lorsqu'une classe est utilisée pour la première fois, le bytecode de cette classe sera chargé en mémoire et ne sera rechargé qu'une seule fois. Une liste de tous les descripteurs de méthode de la classe est conservée à l'entrée du bytecode chargé. Ces descripteurs de méthode contiennent les informations suivantes : où le code de méthode est stocké, quels sont ses paramètres et le descripteur de méthode (catégorie publique), etc. sur.
S'il y a du natif à l'intérieur d'un descripteur de méthode, ce bloc de descripteur aura un pointeur vers l'implémentation de la méthode. Ces implémentations se trouvent dans certains fichiers DLL, mais elles seront chargées dans l'espace d'adressage du programme Java par le système d'exploitation. Lorsqu'une classe avec une méthode native est chargée, sa DLL associée n'est pas chargée, donc le pointeur vers l'implémentation de la méthode n'est pas défini. Ces DLL ne seront chargées que lorsque la méthode native sera appelée, ce qui est réalisé en appelant java.system.loadLibrary().
La dernière chose à noter est que l'utilisation de méthodes locales entraîne une surcharge et fait perdre de nombreux avantages de Java. Si nous n'avons pas le choix, nous pouvons choisir d'utiliser des méthodes locales
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit