JNI定义在native系统中了下列JNI的数据类型,他们分别对应着java的数据类型。
1. Java的原始数据类型,JNI中的数据类型jint,jbyte,jshort,jlong,jfloat,jdouble,jchar,jboolean 分别对应的java中的数据类型,int,byte,short,long,float,double,char和boolean。
2. Java的引用类型,JNI中的jobject对应中java中的java.lang.Object. 同时也定义了下列子类型:
a. jclass对应java.lang.Class
b. jstring对应java.lang.String
c. jthrowable对应java.lang.Throwable
d. jarray对应Java.array.java的array是引用类型,拥有8种原始类型的数组和一个Object数组。因此,对应有8中原始数组,jintArray,jbyteArray,jshortArray,jlongArray,jfloatArray,jdoubleArray和jbooleanArray,加上一个对象数组jobjectArray.
native的函数接受上层的JNI类型的参数,返回值为JNI类型的。当然,native函数操作的数据类型是(如C的string和C 的数组int[])native层的,所以在JNI类型和native层需要做一个转换。
native的程序:
- 接受JNI类型的参数(由java程序传递的)
- 对于引用的JNI类型,转换或者拷贝参数成为本地的native类型,比如:jstring转换成C-String类型,jintArray转换成C的int数组。原始JNI类型,比如jint和jdouble是不需要转换,可以被直接操作。
- 执行相应的操作和运算,按照native类型
- 创建返回对象用JNI类型,复制结果并返回
- 返回
在JNI编程中,最具有挑战性和烦人的是在JNI引用类型和原始类型之间的转换,JNI环境提供了许多功能来执行转换。
JNI是C的接口,并不是面向对象的,并不是真正传递对象。