frankfan的胡思乱想

学海无涯,回头是岸

Java反射与JNI

java从严格意义上而言是一门脚本语言,但得益于Java虚拟机(JVM)的日益发展,各种编译技术(如JIT等)的实践,让Java的【解释】执行性能大幅提升,不再是单纯的解释型语言,这一切的基石就是Java虚拟机

在运行时,JVM提供一套机制,可以【动态】的获取和设置一个对象的Filed,可以【动态】的获取一个对象所属的类(class),可以使用字符串来获取一个类信息,可以【动态】的获取一个类(对象)的方法,而这一切都无视其权限(privateprotectpublic),凌驾于Java的语法之上。这是一把双刃剑,大部分时候我们使用Java提供给我们的工具(语法)就能解决问题,但某些时候如果能合理利用运行时虚拟机提供的关于java对象的额外信息,那么能巧妙的更方便的解决问题。而这种机制被称为【反射】(reflection)

Java反射通常提供的功能是:

  • 根据字符串获取类信息(class)
  • 获取一个类(class)的方法(无论其方法访问权限是什么,或者是否为构造方法,也并不在乎其是否为静态)
  • 获取一个类所拥有的字段(Field),无论其访问权限是什么;并能操作这个字段。(setget
  • 调用一个类的方法

以上就是 Java反射所能提供的能力,也是我们使用Java反射所常使用的功能。(C++调用操作Java对象就是采用的反射机制,这得益于Java虚拟机,而非C++所能拥有的什么能力)

posted on 2021-12-28 00:08  shadow_fan  阅读(168)  评论(0编辑  收藏  举报

导航