native
is een java keyword. Het markeert een methode, die in andere talen zal worden geïmplementeerd, niet in Java. De methode wordt gedeclareerd zonder body en kan niet abstract
zijn. Het werkt samen met JNI (Java Native Interface).
Syntax:
method();
Native methods werden in het verleden gebruikt om performance kritische secties te schrijven, maar met het sneller worden van java is dit nu minder gebruikelijk. Native methods zijn momenteel nodig wanneer
- U vanuit java een bibliotheek moet aanroepen, geschreven in een andere taal.
- U toegang moet krijgen tot systeem of hardware bronnen die alleen bereikbaar zijn vanuit de andere taal (meestal C). Eigenlijk is veel systeem functies die interactie met echte computer (schijf en netwerk IO, bijvoorbeeld) kan dit alleen doen omdat ze native code aanroepen.
Om te voltooien schrijven native methode, moet u uw klasse te verwerken met javah
tool die een header code zal genereren in C. Je moet dan de uitvoering van de header code te bieden, dynamisch laadbare bibliotheek (.so
onder Linux, .dll
onder Windows) te produceren en het te laden (in het eenvoudigste geval met System.load(library_file_name)
. De code completering is triviaal als alleen primitieve types zoals gehele getallen worden doorgegeven, maar wordt complexer als het nodig is om strings of objecten uit te wisselen vanuit de C code. In het algemeen kan alles op C niveau, inclusief het maken van nieuwe objecten en het terugroepen van methoden, geschreven in java.
Om de code in een andere taal (inclusief C++) aan te roepen, moet je een brug schrijven van C naar die taal. Dit is meestal triviaal, omdat de meeste talen vanuit C kunnen worden opgeroepen.