Java native Keyword
Usage and Examples

native Keyword in Java

In Java, the native keyword is used to declare a method that is implemented in another language like C or C++. These methods are not written in Java but are instead defined outside the Java environment and connected using the Java Native Interface (JNI).

This keyword tells the Java compiler: “This method exists, but you won’t find its body here. Look for it in some native library.”

Why Do We Need native Methods?

Java is powerful, but there are moments where:

  • You need to access system-level resources.
  • You want to reuse legacy C/C++ code for performance-critical tasks.
  • You need to interact with platform-specific APIs unavailable in Java.

In these cases, native methods come in handy. They bridge the gap between Java and lower-level languages.

Syntax of the native Keyword

The native keyword is placed in a method declaration, without a body:

public native void printMessage();

Important Rules of native Methods

  • Native methods do not have a body in Java (they end with a semicolon).
  • They are usually declared in Java and implemented in C/C++.
  • You must load the corresponding native library using System.loadLibrary().

Step-by-Step Example: Declaring a Native Method

Step 1: Create a Java Class with a Native Method

public class NativeExample {
    
    // Declare native method
    public native void sayHello();

    // Load the native library
    static {
        System.loadLibrary("NativeExampleImpl");
    }

    public static void main(String[] args) {
        new NativeExample().sayHello();
    }
}
(This will run the native method implemented in C/C++)

Step 2: Compile the Java Code

Use javac NativeExample.java to compile the class.

Step 3: Generate Header File

Use javah NativeExample (deprecated) or javac -h . NativeExample.java to generate a C header file.

Step 4: Implement in C


#include 
#include 
#include "NativeExample.h"

JNIEXPORT void JNICALL Java_NativeExample_sayHello(JNIEnv *env, jobject obj) {
    printf("Hello from native code!\n");
}

Step 5: Compile and Create Shared Library

On Linux/macOS:


gcc -shared -o libNativeExampleImpl.so -fPIC NativeExample.c -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux"

On Windows:


cl /LD NativeExample.c /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32"

Step 6: Run Your Java Program


java NativeExample
Hello from native code!

Limitations of native Keyword

  • Platform Dependency: Native methods are system-specific and break portability.
  • Complex Debugging: Bugs in native code can crash the JVM.
  • Security Risk: Native access bypasses Java’s security model.

Common Use Cases of Native Methods

  • Interfacing with hardware devices.
  • Calling Windows/Linux APIs not available in Java.
  • Performance optimization using existing native libraries.

When to Avoid Using native

Avoid using native methods unless absolutely necessary. Java offers a rich standard library and many cross-platform tools. Use native code only when Java alone cannot solve the problem efficiently.