Java 本地接口规范
1997 年 5 月 16 日
目录
1 - 简介
Java 本地接口概述
背景
JDK 1.0 本地方法接口
Java 运行时接口
原始本地接口和 Java/COM 接口
目标
Java 本地接口方法
利用 JNI 编程
JDK 1.1.2 中的变化
2 - 设计概述
JNI 接口函数和指针
图 2-1 接口指针
加载和链接本地方法
解析本地方法名
表 2-1 Unicode 字符转换
本地方法的参数
代码示例 2-1: 用 C 实现本地方法
代码示例 2-2: 用 C++ 实现本地方法
引用 Java 对象
全局和局部引用
实现局部引用
访问 Java 对象
访问基本类型数组
访问域和方法
报告编程错误
Java 异常
异常和错误代码
异步异常
异常的处理
3 - JNI 的类型和数据结构
基本类型
表 3-1 基本类型和本地等效类型
引用类型
图 3-1 引用类型层次
域 ID 和方法 ID
值类型
类型签名
表 3-2 Java 虚拟机类型签名
UTF-8 字符串
4 - JNI 函数
接口函数表
代码示例 4-1
版本信息
GetVersion
参数
返回值:
类操作
DefineClass
参数:
返回值:
抛出:
FindClass
参数:
返回值:
抛出:
GetSuperclass
参数:
返回值:
IsAssignableFrom
参数:
返回值:
异常
Throw
参数:
返回值:
抛出:
ThrowNew
参数:
返回值:
抛出:
ExceptionOccurred
参数:
返回值:
ExceptionDescribe
参数:
ExceptionClear
参数:
FatalError
参数:
全局及局部引用
NewGlobalRef
参数:
返回值:
DeleteGlobalRef
参数:
DeleteLocalRef
参数:
对象操作
AllocObject
参数:
返回值:
抛出:
NewObjectNewObjectANewObjectV
NewObject
NewObjectA
NewObjectV
参数:
NewObject 的其它参数:
NewObjectA 的其它参数:
NewObjectV 的其它参数:
返回值:
抛出:
GetObjectClass
参数:
返回值:
IsInstanceOf
参数:
返回值:
IsSameObject
参数:
返回值:
访问对象的域
GetFieldID
参数:
返回值:
抛出:
GetField 例程
表 4-1 GetField 访问器例程系列
参数:
返回值:
SetField 例程
表4-2 SetField 访问器例程系列
参数:
调用实例方法
GetMethodID
参数:
返回值:
抛出:
CallMethod 例程CallMethodA 例程Call
CallMethod 例程
CallMethodA 例程
CallMethodV 例程
表 4-3 实例方法调用例程
参数:
CallMethod 例程的其它参数:
CallMethodA 例程的其它参数:
CallMethodV 例程的其它参数:
返回值:
抛出:
CallNonvirtualMethod 例程CallNonvirtual
CallNonvirtualMethod 例程
CallNonvirtualMethodA 例程
CallNonvirtualMethodV 例程
表 4-4 CallNonvirtualMethod 例程
参数:
CallNonvirtualMethod 例程的其它参数:
CallNonvirtualMethodA 例程的其它参数:
CallNonvirtualMethodV 例程的其它参数:
返回值:
调用 Java 方法的结果。
抛出:
访问静态域
GetStaticFieldID
参数:
返回值:
抛出:
GetStaticField 例程
表 4-5 GetStaticField 访问器例程系列
参数:
返回值:
SetStaticField 例程
表4-6 SetStaticField 访问器例程系列
参数:
调用静态方法
GetStaticMethodID
参数:
返回值:
抛出:
CallStaticMethod 例程CallStaticMethodA
CallStaticMethod 例程
CallStaticMethodA 例程
CallStaticMethodV 例程
表 4-7 CallStaticMethod 调用例程
参数:
CallStaticMethod 例程的其它参数:
CallStaticMethodA 例程的其它参数:
CallStaticMethodV 例程的其它参数:
返回值:
抛出:
字符串操作
NewString
参数:
返回值:
抛出:
GetStringLength
参数:
返回值:
GetStringChars
参数:
返回值:
ReleaseStringChars
参数:
NewStringUTF
参数:
返回值:
抛出:
GetStringUTFLength
参数:
返回值:
GetStringUTFChars
参数:
返回值:
ReleaseStringUTFChars
参数:
数组操作
GetArrayLength
参数:
返回值:
NewObjectArray
参数:
返回值:
抛出:
GetObjectArrayElement
参数:
返回值:
抛出:
SetObjectArrayElement
参数:
抛出:
参数:
返回值:
表4-9 GetArrayElements 访问器例程系列 参数:
返回值:
表 4-10 基本类型数组释放模式
表 4-11 ReleaseArrayElements 数组例程系列 参数:
表 4-12 GetArrayRegion 数组访问器例程系列 参数:
抛出:
表 4-13 SetArrayRegion 数组访问器例程系列 参数:
抛出:
注册本地方法
RegisterNatives
参数:
返回值:
抛出:
UnregisterNatives
参数:
返回值:
监视程序操作
MonitorEnter
参数:
返回值:
MonitorExit
参数:
返回值:
Java 虚拟机接口
GetJavaVM
参数:
返回值:
5 - 调用 API
概述
创建虚拟机
连接虚拟机
卸载虚拟机
初始化结构
调用 API 函数
JNI_GetDefaultJavaVMInitArgs
参数:
返回值:
JNI_GetCreatedJavaVMs
参数:
返回值:
JNI_CreateJavaVM
参数:
返回值:
DestroyJavaVM
参数:
返回值:
AttachCurrentThread
参数:
返回值:
DetachCurrentThread
参数:
返回值: