Inleiding op native keyword:
Het native keyword fungeert als een link tussen JAVA taal en brok code of library geschreven in verschillende talen behalve JAVA die misschien afhankelijk zijn van de machine waarop je werkt. Als native keyword wordt toegepast op een methode, dan betekent dit dat de methode zal worden uitgevoerd met behulp van native code geschreven in een andere taal (zoals C of C++) via JNI (JAVA native interface).
Syntax:
De syntax van native code is hetzelfde als normale functie-definitie met “native” keyword toegevoegd in het begin van de functie.
Voor voorbeeld:
Public class testing
{public native String testMethod (String parameter);}
Hier public is een toegang modifier. Het moet public zijn, zodat een ander bestand het kan gebruiken. String is de return data type van de functie. Het kan een geheel getal, karakter of Booleaans zijn, afhankelijk van het sleutelwoord. De parameter die aan deze functie wordt doorgegeven is ook van het datatype string. Alles moet onder klasse worden gehouden.
Na de functiedeclaratie roepen we deze functie aan via het gemaakte object en de geladen bibliotheek.
public static void main(String args)
{
System.loadLibrary(“testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(“NATIVE”);
}
De hierboven gedefinieerde bibliotheek moet eerst worden geladen en het n zijn object wordt aangemaakt. Met behulp van dit object wordt de native functie aangeroepen.
Hoe werkt het native keyword?
Er moeten twee bestanden zijn. Een met JAVA code en de andere met C/C++ legacy code. Java-code zal worden gebruikt om de legacy-code aan te roepen. Deze code werkt in op de hardware en geeft de verwachte output.
Wanneer de legacy code inwerkt op de hardware, zal het niet de richtlijnen volgen die door JAVA zijn opgesteld. Deze code doet de gewenste bewerkingen om de output te krijgen en geeft de resultaten door aan JNI. Java native interface zal dan in zijn directory alle regels controleren die betrekking hebben op native code (dit staat in het bestand genaamd javah.exe in SDK). JNI is ontworpen als onderdeel van Java toolkit. Na deze verwerking zal JAVA de output publiceren in de JAVA taal zelf. Wanneer we programma’s maken in JAVA dan moeten we ervoor zorgen dat er een variabele / data flow link tussen de JAVA-bestand en de legacy-bestand, zodat er een soepele stroom van gegevens tussen beide.
Stappen die uitleggen hoe je gebruik te maken van native keywords worden hieronder gegeven:
- Schrijf de JAVA-code met native methode, gedeelde bibliotheek geladen en sla het op met behulp van “bestandsnaam.JAVA”.
- Compileer JAVA-code en converteer de code naar bytecode.
- Maak C/C++ header-bestand met native functiehandtekening die moet worden aangeroepen.
- Schrijf C/C++ code met de implementatie van native method.
- Run JAVA-uitvoerbaar bestand om de resultaten te zien.
Voorbeelden om de implementatie van native keyword te laten zien:
We moeten code schrijven in Eclipse en de code uitvoeren om een bibliotheek te maken waarmee dan C code zal worden geïmplementeerd.
Code: 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);
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);
}
}
Nadat we deze code hebben opgeslagen in een nieuwe “class” van het java project. We moeten de run omgeving instellen om een header file te genereren.
Wanneer we dit uitvoeren zouden we een bibliotheek gegenereerd moeten krijgen.
Uitvoer:
Hier hebben we een header file gemaakt van de java code die zal fungeren als link tussen de native code en de java taal.
Voordelen:
- Het biedt een extra voordeel aan JAVA om te communiceren met de code geschreven in andere talen en het verminderen van het werk om dezelfde code geschreven in JAVA, dus het verminderen van de code redundantie.
- Het verbetert de algehele code prestaties. Zoals de code geschreven in andere taal misschien sneller als het werkt met de machinetaal in vergelijking met JAVA. We kunnen dan JAVA programma gebruiken om deze code aan te roepen.
- Met deze aanpak kunnen we direct systeemaanroepen geven.
- U kunt dynamisch een vooraf geladen bibliotheek (geschreven in een andere taal dan JAVA) aanroepen met behulp van een willekeurige stuurcode geschreven in JAVA en nog steeds antwoord krijgen in JAVA.
- Maakt het toegankelijk voor JAVA om de hardware middelen te bereiken die alleen beschikbaar zijn om te worden gebruikt door andere talen.
- In het geval dat u een platform afhankelijke code al opgebouwd voor uw toepassing en waarvan de functies niet worden ondersteund via JAVA in dat geval kunnen we native code en koppelen deze native code naar JAVA via native keyword.
Regels:
- Native keyword moet worden gebruikt vóór de naam van de methode.
- Native method declaratie heeft geen body en moet eindigen met een dubbele punt, omdat deze methoden niet zijn gedefinieerd in JAVA, maar zijn aanwezig in C / C + + taal.
- Native methodes kunnen niet worden gedeclareerd als abstracte methode.
- Omdat er geen zekerheid is of de vorige oude code is geschreven in overeenstemming met de IEEE 754 standaard (De IEEE Standard for Floating-Point Arithmetic is een technische standaard voor floating-point rekenkunde die in 1985 is vastgesteld door het Institute of Electrical and Electronics Engineers), kunnen we deze native methodes dus niet declareren als strictftp.
- De Java Native Interface (JNI) specificatie is ontworpen door JAVA om de regels en declaraties te definiëren om native methoden te implementeren, zoals conversie van datatypes tussen Java en de native code.
Conclusie:
Native keyword is die de kloof tussen native talen en JAVA overbrugt. Dit kan worden gebruikt als een kritische link als onze software de interactie met hardware is meer om de efficiënte code met behulp van reeds bestaande code te krijgen. Het maakt de uitvoering werk minder in vergelijking met het ontwerpen van een nieuwe applicatie code vanuit het niets waar het kan worden vermeden.