一、什么是反射
Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,也有称作“自省”。
反射非常强大,它甚至能直接操作程序的私有属性。我们前面学习都有一个概念,被private封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。
反射就像一面镜子,它可以在运行时获取一个类的所有信息,可以获取到任何定义的信息(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。一切反射相关的代码都从获得类对象开始
二、如何得到类对象?
3种获取方式:
2.1 类名.class;
2.2 对象名.getClass();
2.3 Class.forName(全限定名/全路径名)(最常用)
// java反射 是java中的一种重要的机制
// 可以动态的实例化对象,读写属性,调用方法
//一切反射相关的代码都从获得类对象开始
//获取类对象的方式
//1.类名.class Student stu = new Student()
Class clazz = Student.class;
System.out.println(clazz);
//2.对象名.getClass();
Student stu = new Student();
System.out.println("-----------------------");
Class clazz1 = stu.getClass();
System.out.println(clazz1);
//3.Class.forName(全限定名)(最重要)
System.out.println("----------------------");
Class clazz2 = Class.forName("com.zking.refletion.Student");
System.out.println(clazz2);
三、根据类得到类名(全限定名/全路径名)
1)cName.getName(); -->获取全限定名
2)cName.getSimpleName(); -->获取类名
3)cName.getPackage(); -->获取包名
四、根据类得到类的属性
Field field=cla.getField(“属性名”);
field.getName(); -->获取属性名
filed.getType(); -->获取属性类型
field.getModifiers(); -->获取属性访问修饰符
field.set(Object,Object); -->设置属性值,参数1:要设置属性所在对象;参数2:要设置的值;
field.get(Object); -->获取属性值,参数:要获取属性值的对象
clazz.getDeclaredField(“属性名”); -->获取单个属性(私有、公有、受保护、默认、静态)
clazz.getDeclaredFields(); -->获取所有属性(私有、公有、受保护、默认、静态)
五、根据类得到类的方法
//无参无返回、无参有返回、有参无返回、有参有返回
cla.getMethod(); -->获取单个公有方法
cla.getDeclaredMethod(); -->获取当个方法(包括私有、受保护、默认、公有)
cla.getMethods(); -->获取所有公有方法
cla.getDeclaredMethods(); -->获取所有的方法(包括私有、受保护、默认、公有)
六、根据类得到类的构造方法
cla.getConstrutor(); -->获取单个公有构造方法
cla.getDeclaredConstrutor(); -->获取单个构造方法(包括私有、受保护、默认、公有)
cla.getConstrutors(); -->获取所有的公有构造方法
cla.getDeclaredConstrutors(); -->获取所有的构造方法(包括私有、受保护、默认、公有)
七、根据类得到类的实现接口列表
Class[] interface=cla.getInterfaces(); -->获取类对象中所有实现接口列表