Java反射与JNI
java
从严格意义上而言是一门脚本语言,但得益于Java
虚拟机(JVM
)的日益发展,各种编译技术(如JIT
等)的实践,让Java
的【解释】执行性能大幅提升,不再是单纯的解释型语言,这一切的基石就是Java虚拟机
。
在运行时,JVM
提供一套机制,可以【动态】的获取和设置一个对象的Filed
,可以【动态】的获取一个对象所属的类(class
),可以使用字符串来获取一个类信息,可以【动态】的获取一个类(对象)的方法,而这一切都无视其权限(private
、protect
、public
),凌驾于Java
的语法之上。这是一把双刃剑,大部分时候我们使用Java
提供给我们的工具(语法)就能解决问题,但某些时候如果能合理利用运行时虚拟机提供的关于java
对象的额外信息,那么能巧妙的更方便的解决问题。而这种机制被称为【反射】(reflection)
Java
反射通常提供的功能是:
- 根据字符串获取类信息(
class
) - 获取一个类(
class
)的方法(无论其方法访问权限是什么,或者是否为构造方法,也并不在乎其是否为静态) - 获取一个类所拥有的字段(
Field
),无论其访问权限是什么;并能操作这个字段。(set
、get
) - 调用一个类的方法
以上就是 Java
反射所能提供的能力,也是我们使用Java
反射所常使用的功能。(C++
调用操作Java
对象就是采用的反射机制,这得益于Java
虚拟机,而非C++所能拥有的什么能力)
一览众山小
posted on 2021-12-28 00:08 shadow_fan 阅读(168) 评论(0) 编辑 收藏 举报