反射
1.何为反射:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
简单来讲:反向解析(获取信息)
区分:
正向封装:将数据装到类里
反射的加载原理图:

文字描述:
在Java 程序中,JVM 加载完一个类后,在内存中就会产生该类的一个 Class 对象,一个类在堆内存中最多只会有一个 Class 对象,这个Class 对象包含了该类的完整结构信息,我们通过这个 Class 对象便可以得到该类的完整结构信息。
2.反射的功能:
大前提: 运行时进行!!!!!!!!!!!
动态解析类的结构(访问装载到JVM中的类的内部信息):
1.类
2.属性
3.构造器
4.方法
解释何为动态:
在运行时代码可以根据某些条件改变自身结构,java不是动态语言,但可以利用反射机制来实现。
3.反射的运用:
背景:

说明:
"Class<Student>"表示一个类型为"Student"的类的实例,可以通过这个实例来获取和操作该类的信息,比如类的方法、字段和注解等。
"Student.class"表示"Student"类的运行时类对象,可以使用该对象获取类的信息,比如类的名称、修饰符、父类、接口等。
关联:
Class<Student>与Student.class是等价的关系,它们都表示Student类的类类型,可以用于进行反射操作,并具有相同的功能和效果。
三个途径:
1.在已知类源码情况下:
Class<Student> stuClass=Student.class;
2.只知道类字节码情况下:
Class<?> aClass = Class.forName("Student类的路径");
3.在已存在对象的情况下:
Student stu = new Student("胡桃", 16, "女", 12.6f);
获取类信息:
获取类名:
String name = stuClass.getName();
获取访问修饰符:
int mod = stuClass.getModifiers();
其中:返回值为int类型,1代表了public类型
获取属性信息:
只能看到自己及父类中的【可见】属性:Field[] fields = stuClass.getFields();

只能看到当前类的【所有】属性:Field[] declaredFields = stuClass.getDeclaredFields();

获取构造器的信息:
无参构造:

有参构造,类中要有toString:

获取方法的信息:


浙公网安备 33010602011771号