Introduktion till det ursprungliga nyckelordet:
Det ursprungliga nyckelordet fungerar som en länk mellan JAVA-språket och delar av koden eller biblioteket som är skrivna på andra språk än JAVA, vilket kan vara beroende av den maskin du arbetar på. Om nyckelordet native används för en metod innebär det att metoden kommer att implementeras med hjälp av native kod skriven på ett annat språk (som C eller C++) via JNI (JAVA native interface).
Syntax:
Syntaxen för native code är densamma som vanlig funktionsdefinition med nyckelordet ”native” lagt till i början av funktionen.
Till exempel:
Public class testing
{public native String testMethod (String parameter);}
Här är public en access modifier. Den ska vara offentlig så att en annan fil kan använda den. String är funktionens returdatatyp. Den kan vara heltal, tecken eller boolska beroende på nyckelordet. Den parameter som skickas till den här funktionen är också av datatypen sträng. Allt ska hållas under klassen.
Efter funktionsdeklarationen anropar vi denna funktion via objektet som skapats och biblioteket som laddats.
public static void main(String args)
{
System.loadLibrary(”testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(”NATIVE”);
}
Biblioteket som definieras ovan ska laddas först och n dess objekt skapas. Med hjälp av detta objekt anropas den infödda funktionen.
Hur det infödda nyckelordet fungerar?
Det bör finnas två filer. Den ena innehåller Javakod och den andra innehåller C/C++-arvkod. Javakoden kommer att användas för att anropa den äldre koden. Denna äldre kod kommer att interagera med maskinvaran och ge det förväntade resultatet.
När den äldre koden interagerar med maskinvaran kommer den inte att följa de riktlinjer som fastställts av JAVA. Denna kod kommer att göra den önskade bearbetningen för att få utdata och skicka resultaten till JNI. Java native interface kommer sedan att kontrollera i sin katalog som innehåller alla regler för native code (detta finns i filen javah.exe i SDK). JNI är utformad som en del av Javas verktygslåda. Efter denna behandling kommer JAVA att publicera resultaten i själva JAVA-språket. När vi skapar ett program i JAVA måste vi se till att det finns en länk för variabler och dataflöde mellan JAVA-filen och den gamla filen, så att det finns ett smidigt dataflöde mellan de båda.
Steg som förklarar hur man använder sig av infödda nyckelord ges nedan:
- Skriv JAVA-koden som innehåller infödda metoder, delade bibliotek som laddats och spara den med hjälp av ”filename.JAVA”.
- Kompilera JAVA-koden och konvertera koden till bytecode.
- Skapa en C/C++-huvudfil som innehåller signaturer för inhemsk funktion som ska anropas.
- Skriv en C/C++-kod som innehåller implementeringen av den inhemsk metod som ska anropas.
- Kör den körbara JAVA-filen för att se resultatet.
Exempel för att visa implementering av native nyckelord:
Vi bör skriva kod i Eclipse och köra koden för att skapa ett bibliotek som sedan används för att implementera C-kod.
Kod: 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);
}
}
När du sparat den här koden i en ny ”klass” i java-projektet. Vi måste ställa in körmiljön för att generera headerfilen.
![](https://miro.medium.com/max/60/1*yaLOSXveYEmKvNx89oAyuw.png?q=20)
När vi kommer att köra detta bör vi få ett bibliotek genererat.
Utmatning:
Här har vi skapat headerfilen från java-koden som kommer att fungera som en länk mellan infödd kod och javaspråket.
![](https://miro.medium.com/max/60/1*NMVw1c0VLGOm2dxSp-ih8g.png?q=20)
Fördelar:
- Det ger JAVA en extra fördel att kunna interagera med kod skriven i andra språk och minska arbetet med att ha samma kod skriven i JAVA, och därmed minska redundansen i koden.
- Det förbättrar den övergripande kodens prestanda. Eftersom den kod som är skriven på andra språk kanske är snabbare när den arbetar med maskinspråket jämfört med JAVA. Vi kan sedan använda JAVA-programmet för att anropa denna kod.
- Med detta tillvägagångssätt kan vi direkt ge systemanrop. Det minskar sannolikheten för externa störningar och förbättrar hastigheten på kodutförandet.
- Du kan dynamiskt anropa ett förinstallerat bibliotek (skrivet på något annat språk än JAVA) med hjälp av en godtycklig körkod som är skriven i JAVA och ändå få svar i JAVA.
- Gör det tillgängligt för JAVA att nå maskinvaruresurser som endast kan användas av andra språk.
- Om du har en plattformsberoende kod som redan har byggts upp för din applikation och vars funktioner inte stöds via JAVA kan vi i så fall ha en inhemsk kod och länka denna inhemsk kod till JAVA via nyckelordet native.
Regler:
- Nativt nyckelord ska användas före metodnamnet.
- Deklarationen av en native-metod har ingen kropp och bör avslutas med ett semikolon eftersom dessa metoder inte är definierade i JAVA men finns i språket C/C++.
- Inhemska metoder kan inte deklareras som abstrakta metoder.
- Då det inte är säkert att den tidigare gamla koden är skriven i enlighet med IEEE 754-standarden (IEEE Standard for Floating-Point Arithmetic är en teknisk standard för aritmetik med flytande punkter som fastställdes 1985 av Institute of Electrical and Electronics Engineers), så vi kan inte deklarera dessa inhemska metoder som strictftp.
- Specifikationen för Java Native Interface (JNI) är utformad av JAVA för att definiera regler och deklarationer för att implementera inhemska metoder, som t.ex. konvertering av datatyper mellan Java och den inhemska koden.
Slutsats:
Nativt nyckelord är som överbryggar klyftan mellan inhemska språk och JAVA. Detta kan användas som en kritisk länk om vår programvaras interaktion med hårdvara är mer för att få effektiv kod med hjälp av redan existerande kod. Det gör implementeringsarbetet mindre i jämförelse med att utforma en ny applikationskod från grunden där det kan undvikas.