What are native methods in Java and where should they be used?

This question already has an answer here:

  • What is the native keyword in Java for? 11 answers

  • What are native methods in Java and where should they be used?

    Once you see a small example, it becomes clear:

    Main.java :

    public class Main {
        public native int intMethod(int i);
        public static void main(String[] args) {
            System.loadLibrary("Main");
            System.out.println(new Main().intMethod(2));
        }
    }
    

    Main.c :

    #include <jni.h>
    #include "Main.h"
    
    JNIEXPORT jint JNICALL Java_Main_intMethod(
        JNIEnv *env, jobject obj, jint i) {
      return i * i;
    }
    

    Compile and run :

    javac Main.java
    javah -jni Main
    gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include 
      -I${JAVA_HOME}/include/linux Main.c
    java -Djava.library.path=. Main
    

    Output :

    4
    

    Tested on Ubuntu 14.04 with Oracle JDK 1.8.0_45.

    So it is clear that it allows you to:

  • call a compiled dynamically loaded library (here written in C) with arbitrary assembly code from Java
  • and get results back into Java
  • This could be used to:

  • write faster code on a critical section with better CPU assembly instructions (not CPU portable)
  • make direct system calls (not OS portable)
  • with the tradeoff of lower portability.

    It is also possible for you to call Java from C, but you must first create a JVM in C: How to call Java functions from C++?

    Example on GitHub for you to play with.


    The method is implemented in "native" code. That is, code that does not run in the JVM. It's typically written in C or C++.

    Native methods are usually used to interface with system calls or libraries written in other programming languages.


    I like to know where does we use Native Methods

    Ideally, not at all. In reality some functionality is not available in Java and you have to call some C code.

    The methods are implemented in C code.

    链接地址: http://www.djcxy.com/p/96822.html

    上一篇: 在Java中使用native

    下一篇: Java中的本地方法是什么以及它们应该用在哪里?