反射(3)——为什么用反射?!!

来源:互联网 发布:苹果手机怎么抹除数据 编辑:程序博客网 时间:2024/06/08 16:29

1: 通俗定义

反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。
就像我喜欢一个人我得知道他喜欢什么,爱吃什么,活动地点,而class文件对象就像我喜欢的那个人的qq,微信,我可以从qq,微信知道他喜欢什么,爱吃什么,活动地点一些信息。

2:得到Class类的对象
要想这样使用,首先你必须得到class文件对象,其实也就是得到Class类的对象。
* Class类:
* 成员变量 Field
* 构造方法 Constructor
* 成员方法 Method

3 :获取class文件对象的方式

  A:Object类的getClass()方法  B:数据类型的静态属性class  C:Class类中的静态方法public static Class forName(String className)
  • 一般我们到底使用谁呢?
  • A:自己玩 任选一种,第二种比较方便
  • B:开发 第三种
  • 为什么呢?因为第三种是一个字符串,而不是一个具体的类名。这样我们就可以把这样的字符串配置到配置文件中。
    */
public class ReflectDemo {    public static void main(String[] args) throws ClassNotFoundException {        // 方式1        Person p = new Person();        Class c = p.getClass();        Person p2 = new Person();        Class c2 = p2.getClass();        System.out.println(p == p2);// false        System.out.println(c == c2);// true        // 方式2        Class c3 = Person.class;        // int.class;        // String.class;        System.out.println(c == c3);        // 方式3        // ClassNotFoundException        Class c4 = Class.forName("cn.itcast_01.Person");        System.out.println(c == c4);    }}

4: 反射机制能做什么

反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的成员变量和方法;
  • 在运行时调用任意一个对象的方法;
  • 生成动态代理。