zoukankan      html  css  js  c++  java
  • JNI 函数(八)反射支持、获取虚拟机

    JNI 函数(八)反射支持、获取虚拟机

    一、反射支持

      如果程序员知道方法属性的名称和类型,则直接使用 JNI 调用 Java 方法或者访问 Java 字段。Java 核心反射 API 允许在运行时反射 Java 类。JNI 提供了 JNI 中使用的字段和方法 ID 与 Java Core Reflection API 中使用的字段和方法对象之间的一组转换函数。

      (一)、转化获取方法ID

    函数原型:jmethodID FromReflectedMethod(JNIEnv *env,jobject method);

      将 java.lang.reflect.Method 或者 java.lang.reflect.Constructor 对象转换为方法 ID

      参数:

        env:JNIEnv 接口指针

        method:java.lang.reflect.Method 或者 java.lang.reflect.Constructor 对象

      返回:

        方法 ID

      (二)、转化获取属性ID

    函数原型:jfield FromReflectedField(JNIEnv *env,jobject field);

      将 java.lang.reflect.Field 转化域 ID

      参数:

        env:JNIEnv 接口指针

        field:java.lang.reflect.Field 对象

      返回:

        域 ID

      (三)、反转化并获取方法对象

    函数原型:jobject ToReflectedMethod(JNIEnv *env,jclass clazz,jmethodID methodID, jboolean isStatic);

      将源自 cls 的方法 ID 转化为 java.lang.reflect.Method 或者 java.lang.reflect.Constructor 对象。如果方法 ID 指向一个静态属性,isStatic 必须设置为 JNI_TRUE,否则为 JNI_FALSE。

      参数:

        env:JNIEnv 接口指针

        clazz:Java 类对象

        methodID:Java 类对应的方法 id

        isStatic:是否是静态方法

      返回

        对应 Java 层  java.lang.reflect.Method 或者 java.lang.reflect.Constructor 对象。如果失败,则返回 0

      异常:

        如果内存不足,则抛出 OutOfMemoryError

      (四)、反转化并获取属性对象

    函数原型:jobject ToReflectedField(JNIEnv *env,jclass cls,jfieldID field,jboolean isStatic)

      将来源于 cls 的属性 ID 转化为 java.lang.reflect.Field 对象。如果属性 ID 指向一个静态属性,isStatic 必须设置为 JNI_TRUE,否则为 JNI_FALSE

      参数:

        env:JNIEnv 接口指针

        cls:Java 类对象

        methodID:Java 对应的属性 ID

        isStatic:是否是静态属性

      返回:

        成功返回 java.lang.reflect.Field 对象,失败返回 0

      异常:

        如果内存不足,则抛出 OutOfMemoryError

    二、获取虚拟机

    函数原型:jint GetJavaVM(JNIEnv *env, JavaVM **vm);

      返回当前线程对应的 java 虚拟机接口。返回的结果保存在 vm。

      参数:

        env:JNI 接口指针

        vm:保存虚拟机指针

      返回:

        成功返回 0,失败返回负数

  • 相关阅读:
    基于visual Studio2013解决面试题之1307二分查找
    基于visual Studio2013解决面试题之1306奇偶位数交换
    基于visual Studio2013解决面试题之1305字符串所有子集
    cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动
    cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
    cocos2d-x游戏开发系列教程-坦克大战游戏之坦克的显示
    基于visual Studio2013解决面试题之1204大数组查找
    6.6 判断字符串是不是字母类型的
    6.4 从字符串中删除不需要的字符
    6.3 计算字符在字符串中出现的次数
  • 原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/14136192.html
Copyright © 2011-2022 走看看