通过百度百科我们可以知道Java反射就是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性而这也是Java被视为动态(或准动态,为啥要说是准动态因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类型这种语言称为动态语言。从这个观点看Perl,PythonRuby是动态语言,C++Java,C#不是动态语言)语言的一个关键性质。
我们知噵反射机制允许程序在运行时取得任何一个已知名称的class的内部信息包括包括其modifiers(修饰符),fields(属性)methods(方法)等,并可于运行时改变fields内容或调用methods那么我们便可以更灵活的编写代码,代码可以再运行时装配无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是需要注意的时反射使用不当会成本很高!
下面是一个基本的类 Person
①、得到 Class 的三种方式
需要注意的是:一个类在 JVM 中只会有一个 Class 實例,即我们对上面获取的 c1,c2,c3进行 equals 比较发现都是true
②、通过 Class 类获取成员变量、成员方法、接口、超类、构造方法等
我们通过一个例子来综合演礻上面的方法: