native关键字用法
一:native是与C++联合开发的时候用的
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,在源代码里面看不到。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。
1。native 是用做java 和其他语言(如c++)进行协作时用的 也就是native 后的函数的实现不是用java写的
2 native关键字的函数都是操作系统实现的, java只能调用。
3.java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了
二:native的具体用法
1.编写带有native声明的方法的Java类(java文件)
2.使用javac命令编译编写的Java类(class文件)
3.使用javah -jni ****来生成后缀名为.h的头文件(.h的文件)
4.使用其他语言(C、C++)实现本地方法
5.将本地方法编写的文件生成动态链接库(dll文件)
三 :代码实现
1.java文件
2.javac 命令编译
3.生成.h文件 (注意 javah HelloWorld 后边不跟.class)
javah -jni HelloWorld
文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: hello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
4.实现本地方法
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj, jstring name){
const char *str;
str = (*env)->GetStringUTFChars(env, name, NULL);
if (str == NULL) {
return;
}
printf("Hello World! %s \n", str );
return;
}