JNI接口函数 (1)
2016-03-30 16:37
246 查看
版本信息
GetVersion
jint GetVersion(JNIEnv *env);
返回本地方法接口的版本。
参数
env:JNI 接口指针。
返回值:
高 16 位返回主版本号,低 16 位返回次版本号。
在 JDK1.1 中,GetVersion() 返回 0x00010001。
类操作
DefineClass
jclass DefineClass(JNIEnv *env, jobject loader,
const jbyte *buf, jsize bufLen);
从原始类数据的缓冲区中加载类。
参数:
env:JNI 接口指针。
loader:分派给所定义的类的类加载器。
buf:包含 .class 文件数据的缓冲区。
bufLen:缓冲区长度。
返回值:
返回 Java 类对象。如果出错则返回NULL。
抛出:
ClassFormatError:如果类数据指定的类无效。
ClassCircularityError:如果类或接口是自身的超类或超接口。
OutOfMemoryError:如果系统内存不足。
FindClass
jclass FindClass(JNIEnv *env, const char *name);
该函数用于加载本地定义的类。它将搜索由CLASSPATH 环境变量为具有指定名称的类所指定的目录和 zip 文件。
参数:
env:JNI 接口指针。
name:类全名(即包名后跟类名,之间由“/”分隔)。如果该名称以“[”(数组签名字符)打头,则返回一个数组类。
返回值:
返回类对象全名。如果找不到该类,则返回 NULL。
抛出:
ClassFormatError:如果类数据指定的类无效。
ClassCircularityError:如果类或接口是自身的超类或超接口。
NoClassDefFoundError:如果找不到所请求的类或接口的定义。
OutOfMemoryError:如果系统内存不足。
GetSuperclass
jclass GetSuperclass(JNIEnv *env, jclass clazz);
如果 clazz 代表类而非类 object,则该函数返回由 clazz 所指定的类的超类。
如果 clazz 指定类 object 或代表某个接口,则该函数返回NULL。
参数:
env:JNI 接口指针。
clazz:Java 类对象。
返回值:
由 clazz 所代表的类的超类或 NULL。
IsAssignableFrom
jboolean IsAssignableFrom(JNIEnv *env, jclass clazz1,
jclass clazz2);
确定 clazz1 的对象是否可安全地强制转换为clazz2。
参数:
env:JNI 接口指针。
clazz1:第一个类参数。
clazz2:第二个类参数。
返回值:
下列某个情况为真时返回 JNI_TRUE:
第一及第二个类参数引用同一个 Java 类。
第一个类是第二个类的子类。
第二个类是第一个类的某个接口。
异常
Throw
jintThrow(JNIEnv *env, jthrowable obj);
抛出 java.lang.Throwable 对象。
参数:
env:JNI 接口指针。
obj:java.lang.Throwable 对象。
返回值:
成功时返回 0,失败时返回负数。
抛出:
java.lang.Throwable 对象 obj。
ThrowNew
jint ThrowNew(JNIEnv *env, jclass clazz,
const char *message);
利用指定类的消息(由 message 指定)构造异常对象并抛出该异常。
参数:
env:JNI 接口指针。
clazz:java.lang.Throwable 的子类。
message:用于构造java.lang.Throwable 对象的消息。
返回值:
成功时返回 0,失败时返回负数。
抛出:
新构造的 java.lang.Throwable 对象。
ExceptionOccurred
jthrowable ExceptionOccurred(JNIEnv *env);
确定是否某个异常正被抛出。在平台相关代码调用 ExceptionClear() 或 Java 代码处理该异常前,异常将始终保持抛出状态。
参数:
env:JNI 接口指针。
返回值:
返回正被抛出的异常对象,如果当前无异常被抛出,则返回NULL。
ExceptionDescribe
void ExceptionDescribe(JNIEnv *env);
将异常及堆栈的回溯输出到系统错误报告信道(例如 stderr)。该例程可便利调试操作。
参数:
env:JNI 接口指针。
ExceptionClear
void ExceptionClear(JNIEnv *env);
清除当前抛出的任何异常。如果当前无异常,则此例程不产生任何效果。
参数:
env:JNI 接口指针。
FatalError
void FatalError(JNIEnv *env, const char *msg);
抛出致命错误并且不希望虚拟机进行修复。该函数无返回值。
参数:
env:JNI 接口指针。
msg:错误消息。
全局及局部引用
NewGlobalRef
jobject NewGlobalRef(JNIEnv *env, jobject obj);
创建 obj 参数所引用对象的新全局引用。obj 参数既可以是全局引用,也可以是局部引用。全局引用通过调用 DeleteGlobalRef() 来显式撤消。
参数:
env:JNI 接口指针。
obj:全局或局部引用。
返回值:
返回全局引用。如果系统内存不足则返回 NULL。
DeleteGlobalRef
void DeleteGlobalRef(JNIEnv *env, jobject globalRef);
删除 globalRef 所指向的全局引用。
参数:
env:JNI 接口指针。
globalRef:全局引用。
DeleteLocalRef
void DeleteLocalRef(JNIEnv *env, jobject localRef);
删除 localRef所指向的局部引用。
参数:
env:JNI 接口指针。
localRef:局部引用。
GetVersion
jint GetVersion(JNIEnv *env);
返回本地方法接口的版本。
参数
env:JNI 接口指针。
返回值:
高 16 位返回主版本号,低 16 位返回次版本号。
在 JDK1.1 中,GetVersion() 返回 0x00010001。
类操作
DefineClass
jclass DefineClass(JNIEnv *env, jobject loader,
const jbyte *buf, jsize bufLen);
从原始类数据的缓冲区中加载类。
参数:
env:JNI 接口指针。
loader:分派给所定义的类的类加载器。
buf:包含 .class 文件数据的缓冲区。
bufLen:缓冲区长度。
返回值:
返回 Java 类对象。如果出错则返回NULL。
抛出:
ClassFormatError:如果类数据指定的类无效。
ClassCircularityError:如果类或接口是自身的超类或超接口。
OutOfMemoryError:如果系统内存不足。
FindClass
jclass FindClass(JNIEnv *env, const char *name);
该函数用于加载本地定义的类。它将搜索由CLASSPATH 环境变量为具有指定名称的类所指定的目录和 zip 文件。
参数:
env:JNI 接口指针。
name:类全名(即包名后跟类名,之间由“/”分隔)。如果该名称以“[”(数组签名字符)打头,则返回一个数组类。
返回值:
返回类对象全名。如果找不到该类,则返回 NULL。
抛出:
ClassFormatError:如果类数据指定的类无效。
ClassCircularityError:如果类或接口是自身的超类或超接口。
NoClassDefFoundError:如果找不到所请求的类或接口的定义。
OutOfMemoryError:如果系统内存不足。
GetSuperclass
jclass GetSuperclass(JNIEnv *env, jclass clazz);
如果 clazz 代表类而非类 object,则该函数返回由 clazz 所指定的类的超类。
如果 clazz 指定类 object 或代表某个接口,则该函数返回NULL。
参数:
env:JNI 接口指针。
clazz:Java 类对象。
返回值:
由 clazz 所代表的类的超类或 NULL。
IsAssignableFrom
jboolean IsAssignableFrom(JNIEnv *env, jclass clazz1,
jclass clazz2);
确定 clazz1 的对象是否可安全地强制转换为clazz2。
参数:
env:JNI 接口指针。
clazz1:第一个类参数。
clazz2:第二个类参数。
返回值:
下列某个情况为真时返回 JNI_TRUE:
第一及第二个类参数引用同一个 Java 类。
第一个类是第二个类的子类。
第二个类是第一个类的某个接口。
异常
Throw
jintThrow(JNIEnv *env, jthrowable obj);
抛出 java.lang.Throwable 对象。
参数:
env:JNI 接口指针。
obj:java.lang.Throwable 对象。
返回值:
成功时返回 0,失败时返回负数。
抛出:
java.lang.Throwable 对象 obj。
ThrowNew
jint ThrowNew(JNIEnv *env, jclass clazz,
const char *message);
利用指定类的消息(由 message 指定)构造异常对象并抛出该异常。
参数:
env:JNI 接口指针。
clazz:java.lang.Throwable 的子类。
message:用于构造java.lang.Throwable 对象的消息。
返回值:
成功时返回 0,失败时返回负数。
抛出:
新构造的 java.lang.Throwable 对象。
ExceptionOccurred
jthrowable ExceptionOccurred(JNIEnv *env);
确定是否某个异常正被抛出。在平台相关代码调用 ExceptionClear() 或 Java 代码处理该异常前,异常将始终保持抛出状态。
参数:
env:JNI 接口指针。
返回值:
返回正被抛出的异常对象,如果当前无异常被抛出,则返回NULL。
ExceptionDescribe
void ExceptionDescribe(JNIEnv *env);
将异常及堆栈的回溯输出到系统错误报告信道(例如 stderr)。该例程可便利调试操作。
参数:
env:JNI 接口指针。
ExceptionClear
void ExceptionClear(JNIEnv *env);
清除当前抛出的任何异常。如果当前无异常,则此例程不产生任何效果。
参数:
env:JNI 接口指针。
FatalError
void FatalError(JNIEnv *env, const char *msg);
抛出致命错误并且不希望虚拟机进行修复。该函数无返回值。
参数:
env:JNI 接口指针。
msg:错误消息。
全局及局部引用
NewGlobalRef
jobject NewGlobalRef(JNIEnv *env, jobject obj);
创建 obj 参数所引用对象的新全局引用。obj 参数既可以是全局引用,也可以是局部引用。全局引用通过调用 DeleteGlobalRef() 来显式撤消。
参数:
env:JNI 接口指针。
obj:全局或局部引用。
返回值:
返回全局引用。如果系统内存不足则返回 NULL。
DeleteGlobalRef
void DeleteGlobalRef(JNIEnv *env, jobject globalRef);
删除 globalRef 所指向的全局引用。
参数:
env:JNI 接口指针。
globalRef:全局引用。
DeleteLocalRef
void DeleteLocalRef(JNIEnv *env, jobject localRef);
删除 localRef所指向的局部引用。
参数:
env:JNI 接口指针。
localRef:局部引用。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android使用Jni实现压力锅数据检测效果示例
- JAVA中JNI的简单使用分享
- c++ mk文件出错Jni调用产生java.lang.UnsatisfiedLinkError错误解决方法
- 解析Java的JNI编程中的对象引用与内存泄漏问题
- 安卓应用开发通过java调用c++ jni的图文使用方法
- Java调用c++库
- Android App 增量更新实例(Smart App Updates)
- 每周总结20130814——Android NDK环境的搭建和使用,YUV420SP格式图像的处理
- Mac下用Android Studio运行NDK samples
- 用Android Sutdio调试NDK
- Android NDK开发简介
- Android NDK开发之Jni的数据类型
- Android NDK开发之数组类型的操作
- Android NDK开发之Jni调用Java对象
- JNI中参数的传递与操作
- Android JNI 机制
- JNI Java 向C传送字符串尝试-附代码