写代码测试了一下JAVA反射

Java反射的相关类

Class类

拿到Class之后可以获取它的属性

Java封装

Java反射

代码测试一下Java反射中用到的一些api的使用方法

新建一个类来定义一些Field和函数

在主函数中去通过反射调用,测试一下(测试变量调用)

  • 如果是StaticField那么它是属于类的,可以直接通过类调用
  • 如果是PrivateField那么它是属于实例的,需要实例化之后调用
  • 如果是Private还需要修改访问权限setAccessible(true); // 通过取消权限检查来修改访问限制

在主函数中去通过反射调用,测试一下(测试函数调用)

  • 跟变量的调用方式是一样的

以及在native中调用的流程也是一样的,只是使用的api不同

  • 对比

    获取类名:Test.class>env->FindClass

    获取FieldID:testClazz.getDeclaredField>env->GetStaticFieldID

    获取值:publicStaticField_field.get>env->GetStaticObjectField

native使用C和C++编写会略有不同

用C实现的话,函数调用的第一个参数要传入JNIEnv*

  • 因为在jni.h中的声明不同,所以C在使用这些api的时候需要传入env作为第一个参数,还有C里面没有String所以字符串要改为char*之类的改动
  • 总体来说C要比C++更麻烦一些,不如C++简洁