黑马程序员技术交流社区

标题: 【成都校区】反射 [打印本页]

作者: 一半是快乐    时间: 2019-4-25 12:48
标题: 【成都校区】反射
反射:程序在运行状态中,可以动态加载一个只有名称的类,加载完类之后,在堆内存中,就产生了一个 Class 类型的对象,这个对象就包含了完整的结构信息,通过这个对象我们可以看到类的结构。这个对象就像一面镜子,所以我们形象的称之为——反射。
 类加载器首先会检查这个类的Class对象是否已被加载过,如果尚未加载,默认的类加载器就会根据类名查找对应的.class文件。

  想在运行时使用类型信息,必须获取对象(比如类Base对象)的Class对象的引用,使用功能Class.forName(“Base”)可以实现该目的,或者使用base.class。注意,有一点很有趣,使用功能”.class”来创建Class对象的引用时,不会自动初始化该Class对象,使用forName()会自动初始化该Class对象。为了使用类而做的准备工作一般有以下3个步骤:

    加载:由类加载器完成,找到对应的字节码,创建一个Class对象
    链接:验证类中的字节码,为静态域分配空间
    初始化:如果该类有超类,则对其初始化,执行静态初始化器和静态初始化块




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