java反射机制详解

JAVA学习网 2017-07-23 15:00:07

1. 反射机制是什么?

  反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,并能够直接操作程序的内部属性, 还能够动态实例化该类的对象等。

2. 反射机制能做什么?

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法,包括构造方法、实现的接口、父类
  • 在运行时调用任意一个对象的方法

3. 三种生成Class对象的方法

1) 类名.class
  虚拟机将类装入内存,但不做类的初始化工作,返回Class对象
2) Class.forName("包名.类名")
  虚拟机静态加载类,对类进行静态初始化
3) 实例对象.getClass()
  对类进行静态初始化非静态初始化;返回实例对象运行时真正所指的对象(,即最终子类对象, 因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象

4. 反射机制常用API

1) 通过一个对象获得完整包名和类名

Reflect reflect = new Reflect();
System.out.println(testReflect.getClass().getName());
//  .getName(): 返回类名/方法名

2) 获取一个对象的父类、实现的接口和构造函数

Class<?> class = Class.forName("test.Reflect");
//取得父类
Class<?> parentClass = class.getSuperclass();
//获得所有接口
Class<?> intes[] = class.getInterfaces();
//获得全部的构造函数
Constructor<?> cons[] = class.getConstructors();

3) 更多API
Field getField(String name) 获取名为name的public字段
Field getFields()获取所有的public字段
Field getDeclaredField(String name)获取名为name的所有字段,包括public、private、protected
Field getDeclaredFields()获取所有的字段,包括public、private、protected
Constructor[] getConstructors()
Constructor getConstructor(Class[] params)返回形参结构与params顺序相同的构造函数
Method[] getMethods()
Method getMethod(String name, Class[] params)返回名称为name,形参结构与params顺序相同的方法

4) 开始使用Reflection:
用于reflection的类,都可以在java.lang.reflect包中找到.使用步骤
(1)获得想操作的类的java.lang.Class对象, 如 String.class、Class.forName("java.lang.String")、str.getClass();
(2)调用getDeclaredMethods()等方法, 以获取该类中定义的方法列表
(3)使用reflection API来操作这些信息

  • field的简单应用

    Rectangle r = new Rectangle(2, 3);
    Field heightField = r.getClass().getField("height");
    System.out.println(heightField.get(r));//结果: 3
    heightField.set(r, 1);
    System.out.println(heightField.get(r));//结果: 1
阅读(782) 评论(0)