Java Native søgeord og metoder
1. Oversigt
I dette hurtige selvstudie vil vi diskutere konceptet for native søgeord i Java, og vi viser også, hvordan man integrerer native metoder ind i Java-kode.
2. Den native Søgeord i Java
Lad os først og fremmest diskutere, hvad der er ennative søgeord i Java.
Simpelt sagt er dette 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.
3. native Metoder
En native metode er en Java-metode (enten en instans-metode eller en klasse-metode), hvis implementering også er skrevet i et andet programmeringssprog såsom C/C++.
Desuden en metode markeret som native kan ikke have en krop og skal slutte med et semikolon:
[ public | protected | private] native [return_type] method ();
Vi kan bruge dem til:
- implementer en grænseflade med systemopkald eller biblioteker skrevet på andre programmeringssprog
- adgang til system- eller hardwareressourcer, der kun er tilgængelige fra det andet sprog
- integrere allerede eksisterende ældre kode skrevet i C/C++ i en Java-applikation
- kald et kompileret dynamisk indlæst bibliotek med vilkårlig kode fra Java
4. Eksempler
Lad os nu demonstrere, hvordan man integrerer disse metoder i vores Java-kode.
4.1. Adgang til Native Code i Java
Lad os først og fremmest oprette en klasse DateTimeUtils der skal have adgang til en platformafhængig native metode kaldet getSystemTime :
public class DateTimeUtils {
public native String getSystemTime();
// ...
}
For at indlæse det bruger vi System.loadLibrary.
Lad os foretage opkaldet for at indlæse dette bibliotek i en statisk blokere, så den er tilgængelig 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. Tester native Metoder
Lad os endelig se, hvordan vi kan teste native metoder defineret i DateTimeUtils klasse:
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:
[main] INFO c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
Som vi kan se, med hjælp fra native søgeord, er vi i stand til at få adgang til en platformafhængig implementering skrevet på et andet sprog (i vores tilfælde C++).
5. Konklusion
I denne artikel har vi lært det grundlæggende i native nøgleord og metoder. Med et hurtigt eksempel har vi også lært, hvordan man integrerer dem i Java.
Kodestykkerne, der bruges i denne artikel, er tilgængelige via Github.