Introducere privind cuvântul cheie nativ:
Limbajul cheie nativ acționează ca o legătură între limbajul JAVA și o bucată de cod sau o bibliotecă scrisă în diferite limbaje, cu excepția JAVA, care poate depinde de mașina pe care se operează. În cazul în care cuvântul cheie nativ este aplicat unei metode, înseamnă că metoda va fi implementată folosind cod nativ scris într-un alt limbaj (cum ar fi C sau C++) prin intermediul JNI (JAVA native interface).
Sintaxa:
Sintaxa codului nativ este aceeași cu cea a definiției normale a funcției, cu adăugarea cuvântului cheie „nativ” la începutul funcției.
De exemplu:
Clasa Publică teste
{public nativ String nativ TestMethod (String parameter);}
Aici public este un modificator de acces. Ar trebui să fie public, astfel încât un alt fișier să îl poată utiliza. String este tipul de date de retur al funcției. Acesta poate fi întreg, caracter sau boolean în funcție de cuvântul cheie. Parametrul transmis acestei funcții este, de asemenea, de tipul de date string. Totul ar trebui să fie păstrat în cadrul clasei.
După declararea funcției, apelăm această funcție prin intermediul obiectului creat și al bibliotecii încărcate.
public static void main(String args)
{
System.loadLibrary(„testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(„NATIVE”);
}
Biblioteca definită mai sus ar trebui să fie încărcată mai întâi și apoi n se creează obiectul său. Cu ajutorul acestui obiect , funcția nativă este apelată.
Cum funcționează cuvântul cheie nativ?
Ar trebui să existe două fișiere. Unul care să conțină codul JAVA, în timp ce celălalt ar trebui să aibă codul moștenit C/C++. Codul Java va fi utilizat pentru a apela codul moștenit. Acest cod moștenit va interacționa cu hardware-ul și va returna rezultatul așteptat.
Când codul moștenit interacționează cu hardware-ul, atunci acesta nu va respecta liniile directoare stabilite de JAVA. Acest cod va face procesarea dorită pentru a obține ieșirea și va transmite rezultatele către JNI. Interfața nativă Java va verifica apoi în directorul său care conține toate regulile referitoare la codul nativ (Acesta se află în fișierul numit javah.exe din SDK). JNI este concepută ca parte a setului de instrumente Java. După această procesare, JAVA va publica rezultatele chiar în limbajul JAVA. Atunci când creăm un program în JAVA, atunci trebuie să ne asigurăm că există o legătură de flux de date/variabile între fișierul JAVA și fișierul moștenit, astfel încât să existe un flux de date fluent între ambele.
Pasii care explică modul de utilizare a cuvintelor cheie native sunt prezentați mai jos:
- Scrieți codul JAVA care conține metoda nativă, biblioteca partajată încărcată și salvați-l folosind „filename.JAVA”.
- Compilați codul JAVA și convertiți codul în bytecode.
- Creați fișierul de antet C/C++ care conține semnătura funcției native care trebuie apelată.
- Scrieți codul C/C++ care conține implementarea metodei native.
- Executați fișierul executabil JAVA pentru a vedea rezultatele.
Exemple pentru a arăta implementarea cuvântului cheie nativ:
Ar trebui să scriem codul în Eclipse și să rulăm codul pentru a crea o bibliotecă cu ajutorul căreia apoi va fi implementat codul C.
Cod: pachet 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);
}
}
După salvarea acestui cod în noua „clasă” din proiectul java. Trebuie să configurăm mediul de execuție pentru a genera fișierul de antet.
![](https://miro.medium.com/max/60/1*yaLOSXveYEmKvNx89oAyuw.png?q=20)
Când vom rula acest lucru, ar trebui să obținem o bibliotecă generată.
Ieșire:
Aici am creat fișierul de antet din codul java care va acționa ca o legătură între codul nativ și limbajul java.
![](https://miro.medium.com/max/60/1*NMVw1c0VLGOm2dxSp-ih8g.png?q=20)
Avantaje:
- Acesta oferă un avantaj suplimentar pentru JAVA de a interacționa cu codul scris în alte limbaje și reduce munca pentru a avea același cod scris în JAVA, reducând astfel redundanța codului.
- Ambunătățește performanța generală a codului. Deoarece codul scris în alt limbaj poate fi mai rapid atunci când lucrează cu limbajul mașină în comparație cu JAVA. Putem folosi apoi programul JAVA pentru a apela acest cod.
- Utilizând această abordare, putem da direct apeluri de sistem. Reducând probabilitatea interferențelor externe și îmbunătățind viteza de execuție a codului.
- Puteți apela dinamic o bibliotecă preîncărcată (scrisă în orice alt limbaj decât JAVA) folosind un cod de conducere arbitrar scris în JAVA și tot veți obține răspuns în JAVA.
- Face accesibil pentru JAVA să ajungă la resursele hardware care sunt disponibile pentru a fi folosite doar de alte limbaje.
- În cazul în care aveți un cod dependent de platformă deja construit pentru aplicația dvs. și ale cărui caracteristici nu sunt suportate prin JAVA, în acest caz putem avea cod nativ și putem lega acest cod nativ de JAVA prin intermediul cuvântului cheie nativ.
Reguli:
- Cuvântul cheie nativ trebuie folosit înaintea numelui metodei.
- Declarația metodei native nu are corp și trebuie să se termine cu două puncte și jumătate, deoarece aceste metode nu sunt definite în JAVA, dar sunt prezente în limbajul C/C++.
- Metodele native nu pot fi declarate ca metode abstracte.
- Din moment ce nu există nici o certitudine dacă vechiul cod anterior este scris în conformitate cu standardul IEEE 754 (The IEEE Standard for Floating-Point Arithmetic este un standard tehnic pentru aritmetica în virgulă mobilă stabilit în 1985 de către Institute of Electrical and Electronics Engineers), deci, nu putem declara aceste metode native ca strictftp.
- Specificația Java Native Interface (JNI) este concepută de JAVA pentru a defini regulile și declarațiile de implementare a metodelor native, cum ar fi conversia tipurilor de date între Java și codul nativ.
Concluzie:
Cuvântul cheie nativ este cel care face legătura între limbajele native și JAVA. Acesta poate fi folosit ca o legătură critică dacă interacțiunea software-ului nostru cu hardware-ul este mai mult pentru a obține un cod eficient folosind codul preexistent. Aceasta face ca munca de implementare să fie mai mică în comparație cu proiectarea de la zero a unui nou cod de aplicație, ori de câte ori aceasta ar putea fi evitată.