Overview
tässä nopeassa opetusohjelmassa keskustelemme natiivin avainsanan käsitteestä Javassa ja näytämme myös, miten natiivin menetelmät integroidaan Java-koodiin.
natiivi Avainsana Javassa
ensinnäkin keskustellaan siitä, mikä on natiivi avainsana Javassa.
Yksinkertaisesti sanottuna kyseessä on ei-access-modifioija, jota käytetään muun kuin Javan kielellä toteutettujen menetelmien, kuten C / C++: n, käyttöön.
se ilmaisee jonkin menetelmän tai koodin alustariippuvaista toteutusta ja toimii myös rajapintana JNI: n ja muiden ohjelmointikielten välillä.
natiivimenetelmät
natiivimenetelmä on Java-menetelmä (joko instanssimenetelmä tai luokkamenetelmä), jonka toteutus on kirjoitettu myös toisella ohjelmointikielellä, kuten C / C++: lla.
lisäksi natiiviksi merkityllä menetelmällä ei voi olla runkoa ja sen tulisi päättyä puolipisteeseen:
native method ();
Voimme käyttää niitä:
- toteuta rajapinta järjestelmäkutsuilla tai muilla ohjelmointikielillä kirjoitetuilla kirjastoilla
- pääsyjärjestelmä tai laitteistoresurssit, jotka ovat saavutettavissa vain toiselta kieleltä
- integroi jo olemassa oleva C/C++ – kielellä kirjoitettu vanha koodi Java-sovellukseen
- soita koottuun dynaamisesti ladattuun kirjastoon, jossa on mielivaltaista koodia Javasta
esimerkkejä
nyt näytetään, miten nämä menetelmät integroidaan Java-koodiimme.
4, 1. Haetaan Natiivikoodia Java-kielellä
ensinnäkin luodaan luokkadatimeutils, joka tarvitsee käyttöön alustariippuvaisen natiivimenetelmän nimeltä getSystemTime:
public class DateTimeUtils { public native String getSystemTime(); // ...}
sen lataamiseen käytämme järjestelmää.loadLibrary.
Let ’ s place the call to load this library in a staattinen block so that it is available in our class:
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); }}
we have created a dynamic-link library, nativedatetimeutils, that implies getSystemTime in C++ using detailed instructions covered in our guide to JNI article.
4, 2. Native Methods
lopuksi katsotaan, miten voimme testata DateTimeUtils-luokassa määriteltyjä natiivimenetelmiä:
public class DateTimeUtilsManualTest { @BeforeClass public static void setUpClass() { // .. load other dependent libraries System.loadLibrary("nativedatetimeutils"); } @Test public void givenNativeLibsLoaded_thenNativeMethodIsAccessible() { DateTimeUtils dateTimeUtils = new DateTimeUtils(); LOG.info("System time is : " + dateTimeUtils.getSystemTime()); assertNotNull(dateTimeUtils.getSystemTime()); }}
alla on metsurin ulostulo:
INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
kuten näemme, natiivi-avainsanan avulla pääsemme onnistuneesti alustariippuvaiseen toteutukseen kirjoitettuna toisella kielellä (meidän tapauksessamme C++).
johtopäätös
tässä artikkelissa olemme oppineet natiivien avainsanojen ja menetelmien perusteet. Nopean esimerkin avulla olemme myös oppineet integroimaan ne Javaan.
tässä artikkelissa käytetyt koodinpätkät ovat saatavilla Githubin kautta.
Aloita kevät 5: llä ja Kevätsotku 2: lla, Opi kevät-kurssin kautta:
>> tsekkaa kurssi