反射机制Reflection

1、静态语言和动态语言

  • 静态语言 : 运行时结构不可变
  • 动态语言 : 运行时,代码可以根据某些条件改变自己结构
  • Java 依赖反射机制,可以看成是一门“准动态语言”

2、Java Reflection

  • 反射机制运行程序在执行期间 借助Reflection API 去读取到类的内部信息,并且直接操作内部属性和方法
Class c= Class.forName("java.lang.String");

加载完类后,会产生一个Class 对象(一个类只有一个Class对象),我们通过这个Class对象查看到类的内部信息等等,就叫做:反射

3、Class类

JDK在Object类中提供一个方法交getClass 被所有的子类继承

    public final native Class<?> getClass();

通过这个方法,可以获得一个Class类,这个类是Java反射的源头

在这里插入图片描述

  • Class 本身也是一个类
  • Class 对象只能由系统建立对象
  • 一个加载的类在 JVM 中只会有一个Class实例
  • 一个Class对象对应的是一个加载到JVM中的一个.class文件
  • 每个类的实例都会记得自己是由哪个 Class 实例所生成
  • 通过Class可以完整地得到一个类中的所有被加载的结构

4、反射获取到class的几种方式

比如我们创建一个Person对象,并且把他new 出来

   Person person = new Person();
  • 通过调用对象的getClass方法
	Class class1 = person.getClass();
  • 借助Class通过字符串获取(包名 + 类名)
	Class class2 = Class.forName("com.zrd.Reflection.Person");
  • 通过静态成员变量class 获取
	Class class3 = person.class;
  • 针对基本数据类型
	Class class4 = Integer.TYPE;
  • 获得父类的class
	Class class5 = person.getSuperclass();

猜你喜欢

转载自blog.csdn.net/weixin_45844836/article/details/112726428
今日推荐