1. 什么是反射及作用
动态获取类或对象信息以及动态调用对象方法的机制
作用:
获取类或接口的包名,类名,修饰符类型 获取类所包含的成员信息
白话文: 在java程序运行的时候,我们可以拿到一个类的任意方法及变量,
并且可以调用任意方法,更改任意变量
应用最广泛的地方:
配合注解使用,注解的底层都是反射.
2. 使用反射获取Class****对象的三种方式
a. Class的forName() --- Class.forName(“com.bwie.Student”)//参数是全类名
b. 对象的getClass() --- new Student().getClass()
c. 类的class属性 --- Student.class
3. 获取Class****对象对应类所包含的构造方法 (构造器Constructor****)
getConstructor() 获取一个由public修饰的构造函数
getConstructors() 获取所有由public修饰的构造函数
getDeclaredConstructor() 获取一个非公共的构造函数 (包含私有 公共)
getDeclaredConstructors() 获取所有的构造函数 (包含私有 公共)
4. 获取Class****对象对应类所包含的成员变量 (属性Field****)
getField() 获取一个由public修饰的成员变量
getFields() 获取所有由public修饰的成员变量
getDeclaredField() 获取一个非公共的成员变量 (包含私有 公共)
getDeclaredFields() 获取所有的成员变量 (包含私有 公共)
5. 获取Class****对象对应类所包含的成员方法 (属性Method****)
getMethod() 获取一个由public修饰的成员方法
getMethods() 获取所有由public修饰的成员方法
getDeclaredMethod() 获取一个非公共的成员方法 (包含私有 公共)
getDeclaredMethods() 获取所有的成员方法 (包含私有 公共)
获取Class****对象的修饰符类型Modifier
6. 通过反射创建对象的两种方式
a. 使用Class对象的newInstance()
如 Class<?> cls = Student.class
cls.newInstance() 注意:该方式只能通过无参构造创建对象
b. 使用Constructor对象的newInstance()
如 Class<?> cls = Student.class
Constructor con = cls.getConstructor()
con.newInstance(注意:该方式可以通过无参构造和有参构造来创建对象)
7. 使用反射访问成员方法
通过Method****类的invoke()****方法进行方法调用
//访问权限的设置 当我们想调用私有方法,更改私有属性的时候,必须先把
该方法/该属性,设置如下(暴力反射)
xxx.setAccessible(true)
8. 什么是设计模式
软件开发过程中共性问题的可重用解决方案
外延:单例模式 工厂模式 适配器模式 代理模式(动态代理和静态代理)
单例模式确保一个类只能创建一个实例的设计模式
9. 设计模式小结
个人笔记仅供参考!