黑马程序员技术交流社区

标题: 反射应该怎么更好的去理解? [打印本页]

作者: 默狼    时间: 2013-11-26 21:06
标题: 反射应该怎么更好的去理解?
今天学了反射,但对反射没听懂.不明白反射到底是做什么用的?应该怎样理解反射?
/*
* 反射:就是指通过字节码文件,去使用构造方法,成员变量,成员方法。
*
* 你想使用这些内容,那么首先要做的事情,就是你能够获取到字节码文件对象。
* 如何获取Class的对象呢?
* A:使用Object类的getClass()方法。
* B:使用数据类型.class这个静态的成员变量。
* C:使用的是Class类的forName()静态方法。
*   public static Class<?> forName(String className)
*
* 为什么常用第三种:
*  第三种方案需要的参数,将来可以通过配置文件配置使用。
*/
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
  // 方式1
  Person p = new Person();
  Person p2 = new Person();
  Class c = p.getClass();
  Class c2 = p2.getClass();
  System.out.println(p == p2);// false
  System.out.println(c == c2);// true
  // 方式2
  Class c3 = Person.class;
  System.out.println(c == c3);
  // 方式3
  // public static Class<?> forName(String className)
  Class c4 = Class.forName("cn.itcast_01.Person");
  // cn.itcast_01.Person
  // cn.itcast_01.Person
  System.out.println(c == c4);
}
} 希望大神指点下

作者: 容嬷嬷当年也是    时间: 2013-11-26 21:40
反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等,。System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码


反射的作用:

1.       可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现     有对象中获取类型

2.       应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。

3.       反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。

说透彻一点反射就是Java类的自省机制,暴露自身的一些方法、属性等自身状况





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2