Java 反射机制 I

反射机制

java中的所有数据类型都是对象或者基础类型,如果将交互的数据用来创建对象,即在不修改源码的情况下,来控制程序;

  • 反射机制允许程序在执行期间借助于Reflection API 获取任何类的内部信息【五大成员变量】;
  • 加载完类之后,在堆中产生了一个Class类型的对象【一个类只有一个Class对象】,这个对象包含了这个类的完整结构信息,通过这个类可以得到这个类的完整结构信息;

java 程序的三个阶段

  • 编译阶段;
  • Runtime 运行阶段;
  • Class 类阶段【类加载阶段】:类加载器加载
    • 成员变量:Field[] fields;
    • 构造器:Constructor[] constroctor;
    • 成员方法:Method[] method;

反射主要的类:Class【类加载后在堆中的对象】, Method, Field, Constroctor;

  • 不能获取私有的成员变量;
  • 方法 setAccessible() 方法可以启动和禁止访问安全检查的开关,以提高反射效率;

Class 类:

  • Class也是类,因此也继承了Object类;
  • Class类的对象不是new 出来的,而是由系统创建;
    • 【类加载器加载】:传统的对象通过 new 由ClassLoader的loadClass()方法,仅只加载一次
    • 反射:由Class的forName()也会进入到ClassLoader的loadClass()方法;
  • 对于某个类的Class对象,在内存中仅有一份,且类只加载一次;
  • 每个类的实例都会记得自己是由哪个Class实例所构成;
  • 通过Class对象可以得到一个类的完整结构;
  • Class对象是存放在堆的;
  • 类的加载,除了对应Class类的生成,还有类的字节码二进制数据【包括方法代码,变量名,方法名,访问权限】,是存放在方法区的;
posted @ 2025-02-24 20:53  烟雨断桥  阅读(8)  评论(0)    收藏  举报