1. The native Keyword in Java
Simply put, this native keyword is a non-access modifier that is used to access methods implemented in a language other than Java like C/C++.
It indicates platform-dependent implementation of a method or code and also acts as an interface between JNI and other programming languages.
2. native Methods
A native method is a Java method (either an instance method or a class method) whose implementation is also written in another programming language such as C/C++.
Moreover, a method marked as native cannot have a body and should end with a semicolon:
[ public | protected | private] [return_type] native method ();
We can use them to:
- implement an interface with system calls or libraries written in other programming languages
 - access system or hardware resources that are only reachable from the other language
 - integrate already existing legacy code written in C/C++ into a Java application
 - call a compiled dynamically loaded library with arbitrary code from Java
 
3. Examples
3.1 Accessing Native Code in Java
A class DateTimeUtils that needs to access a platform-dependent native method named getSystemTime:
public class DateTimeUtils {
    public native String getSystemTime();
    // ...
}
To load it, we’ll use the System.loadLibrary.
Let’s place the call to load this library in a static 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 implements getSystemTime in C++ using detailed instructions covered in our guide to JNI article.
3.2 Testing native Methods
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());
    }
}
Below is the output of the logger:
[main] INFO  c.b.n.DateTimeUtilsManualTest - System time is : Wed Dec 19 11:34:02 2018
As we can see, with the help of the native keyword, we’re successfully able to access a platform-dependent implementation written in another language (in our case C++).