Java >> Java tutorial >  >> Tag >> native

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.


Java tag