Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

Java Top

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:


1. Overview

In this quick tutorial, we’ll discuss the concept of the native keyword in Java, and we'll also show how to integrate native methods into Java code.

2. The native Keyword in Java

First of all, let's discuss what is a native keyword in Java.

Simply put, this 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.

3. 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] native [return_type] 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

4. Examples

Let's now demonstrate how to integrate these methods into our Java code.

4.1. Accessing Native Code in Java

First of all, let's create 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 {

We have created a dynamic-link library, nativedatetimeutils, that implements getSystemTime in C++ using detailed instructions covered in our guide to JNI article.

4.2. Testing native Methods

Finally, let's see how we can test native methods defined in the DateTimeUtils class:

public class DateTimeUtilsManualTest {

    public static void setUpClass() {
        // .. load other dependent libraries  

    public void givenNativeLibsLoaded_thenNativeMethodIsAccessible() {
        DateTimeUtils dateTimeUtils = new DateTimeUtils();
        LOG.info("System time is : " + 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++).

5. Conclusion

In this article, we've learned the basics of native keywords and methods. With a quick example, we've also learned how to integrate them in Java.

The code snippets used in this article are available over Github.

Java bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

Generic footer banner
Comments are closed on this article!