native函数定义
|
|
C/C++访问Java字段
- 获取jclass对象
- 获取字段ID
- 设置字段的值
|
|
C/C++访问Java方法
- 获取jclass对象
- 获取方法ID
- 调用方法
|
|
C/C++访问Java静态字段
- 获取jclass对象
- 获取静态字段ID
- 设置静态字段的值
|
|
C/C++访问Java静态方法
- 获取jclass对象
- 获取静态方法ID
- 调用静态方法
|
|
静态native方法访问Java静态字段
- 获取静态字段id
- 设置静态字段值
|
|
示例代码
Java代码
|
|
C/C++代码
|
|
Q&A
为什么要得到jclass呢 ?
因为 ,我们要获取字段ID,在JNI中,获取java字段与方法都需要签名。而签名是在类加载的时候完成,所以在获取字段ID的时候需要传入jclass。
为什么传入了字段名称,还需要签名呢 ?
因为java支持重载 , 一个方法名称可以有多个不同实现 , 根据传入的参数不同 ,所以C语言调用函数为了区分不同的方法, 而对每个方法做了签名 , 而字段则可用来标识类型。
在.class的文件目录下 ,使用
javap -s -p className
就可以列举出 , 所有的字段与方法签名