oversigt
i denne hurtige vejledning diskuterer vi begrebet det native søgeord i Java, og vi viser også, hvordan man integrerer native metoder i Java-kode.
det oprindelige nøgleord i Java
lad os først diskutere, hvad der er et oprindeligt nøgleord i Java.
kort sagt, dette er en ikke-adgangsmodifikator, der bruges til at få adgang til metoder implementeret på et andet sprog end Java som C/C++.
det angiver platformafhængig implementering af en metode eller kode og fungerer også som en grænseflade mellem JNI og andre programmeringssprog.
native metoder
en native metode er en Java-metode (enten en instansmetode eller en klassemetode), hvis implementering også er skrevet på et andet programmeringssprog såsom C / C++.
desuden kan en metode markeret som indfødt ikke have en krop og skal ende med et semikolon:
native method ();
Vi kan bruge dem til at:
- implementer en grænseflade med systemopkald eller biblioteker skrevet på andre programmeringssprog
- access system-eller udstyrsressourcer, der kun kan nås fra det andet sprog
- Integrer allerede eksisterende ældre kode skrevet i C/C++ i et Java-program
- kald et kompileret dynamisk indlæst bibliotek med vilkårlig kode fra Java
eksempler
lad os nu demonstrere, hvordan disse metoder integreres i Vores Java-kode.
4.1. Adgang til indfødt kode i Java
lad os først oprette en klassedatetimeutils, der skal have adgang til en platformafhængig indfødt metode ved navn getSystemTime:
public class DateTimeUtils { public native String getSystemTime(); // ...}
for at indlæse det bruger vi systemet.loadLibrary.
lad os placere opkaldet for at indlæse dette bibliotek i en statisk blok, så det er tilgængeligt i vores klasse:
public class DateTimeUtils { public native String getSystemTime(); static { System.loadLibrary("nativedatetimeutils"); }}
Vi har oprettet et dynamisk linkbibliotek, nativedatetimeutils, der implementerer getSystemTime i C++ ved hjælp af detaljerede instruktioner, der er dækket i vores guide til JNI-artikel.
4.2. Test af native metoder
endelig, lad os se, hvordan vi kan teste native metoder defineret i DateTimeUtils-klassen:
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()); }}
nedenfor er output fra loggeren:
INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
Som vi kan se, ved hjælp af det native søgeord, er vi med succes i stand til at få adgang til en platformafhængig implementering skrevet på et andet sprog (i vores tilfælde c++).
konklusion
i denne artikel har vi lært det grundlæggende i indfødte søgeord og metoder. Med et hurtigt eksempel har vi også lært, hvordan man integrerer dem i Java.
de kodestykker, der bruges i denne artikel, er tilgængelige over Github.
kom i gang med foråret 5 og foråret Boot 2, gennem Lær foråret kursus:
>>tjek kurset