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,失败返回负数

  • 相关阅读:
    Codeforces 1105D Kilani and the Game【BFS】
    Codeforces 1096D Easy Problem 【DP】
    Codeforces 920F
    Codeforces 1076D Edge Deletion 【最短路+贪心】
    POJ 3090 Visible Lattice Points 【欧拉函数】
    POJ 1284 Primitive Roots (欧拉函数+原根)
    HDU 2841-Visible Trees 【容斥】
    HDU 1796 How many integers can you find 【容斥】
    HDU 4135 Co-prime (容斥+分解质因子)
    CodeForces 161D Distance in Tree【树形DP】
  • 原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/14136192.html
Copyright © 2011-2022 走看看