Từ khoá native, native method trong Java

Từ khoá native trong Java được sử dụng để chỉ định một hàm được triển khai bởi các ngôn ngữ khác như C, C++. Lưu ý rằng từ khoá native chỉ được sử dụng cho method, ngoài ra nó không thể áp dụng ở bất cứ đâu.

Các mục tiêu chính khi sử dụng từ khoá native:

  • Tăng hiệu xuất của hệ thống.
  • Đạt chương trình có thể giao tiếp ở mức máy, bộ nhớ.
  • Sử dụng các mã nguồn có sẵn mà không phải được viết bằng Java.

Ví dụ 

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));
    }
}
#include <jni.h>
#include "Main.h"

JNIEXPORT jint JNICALL Java_Main_intMethod(
    JNIEnv *env, jobject obj, jint i) {
  return i * i;
}

Ở trên chúng ta có một native method là intMethod(). Để biên dịch và chạy chương trình với mã nguồn được triển khai trong C chúng ta có thể chạy lệnh cmd sau:

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

Chương trình được chạy trên Ubuntu 14.04 và Oracle JDK 1.8.0_45. 

Những điểm quan trọng của từ khoá native

  • Đối với các native method, việc triển khai các phương thức gốc đã có sẵn trong các ngôn ngữ cũ như C, C ++ và chúng ta không chịu trách nhiệm cung cấp việc triển khai. Do đó, khai báo phương thức gốc phải kết thúc bằng; (dấu chấm phẩy).
  • Chúng ta không thể khai báo phương thức gốc là một abstract method.
  • Chúng ta không thể khai báo native method là strictfp vì không có gì đảm bảo rằng các ngôn ngữ cũ (C, C ++) tuân theo tiêu chuẩn IEEE 754.
  • Uu điểm chính của từ native là cải thiện hiệu suất nhưng nhược điểm chính của từ khóa gốc là nó phá vỡ bản chất độc lập nền tảng của java.

Nguồn tham khảo

https://www.geeksforgeeks.org/native-keyword-java/

https://stackoverflow.com/questions/18900736/what-are-native-methods-in-java-and-where-should-they-be-used

0 0 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
1
0
Would love your thoughts, please comment.x
()
x