Reflect
1.反射--reflect
面向对象的编程思想
类 从很多对象中抽取出来的共有的特征行为 抽象描述 用来描述一组对象
对象 现实生活中 存在好多对象 很多共同特征 相同行为类是用来描述一组对象
反射机制认为是用来描述一组类
Class 用来描述类本身
Package 用来描述类中所属的包
Field 用来描述类中的属性
Method 用来描述类中的方法
Construstor 用来描述类中的构造方法
Annotation 用来描述类中的注解
2.操作
1.获取Class(相当于获取到了File对象)
Class clazz=Class.forName("包名.类名“)
Class clazz=类名.class
Class clazz=对象.getClass()//Object类中的方法
2.Class中的常用方法
1.getModifiers();
获取类的修饰符(权限,特征)
每一个修饰符 用一个整数来进行表示
每一个修饰符 用一个整 数来进行表示
0开始-0 1 2 4 8 16 32 64 128 256 512
0-default 1-public 2-private 4-protected
8-static 16-final 32-synchronized 64.volatile
128-transient 256-native 5112-interface 1024-abstract
2.getName()
类全名
3.getSimpleName()
类名
4.getPackage()
p.getName()
5.getSuperClass()
获取超类(父类)
getClasses()
获取类中的内部类(public)
6.getInterfaces();
获取当前类的所有父接口
7.newInstance()
默认调用无参构造方法创建对象
8.getField("属性名")
getFields()
如上的两个方法只能获取共有的属性 但是包含继承过来的父类属性
9.getDeclaredField("属性")
getDeclaredFields()
如上两个方法能获取共有的和私有的属性 但是只能获取本类中的属性
3.Field类中的常用方法
int getModifers();
获取属性修饰符(不包含私有)
Class getType();
属性类型
String getName();
属性名字
操作属性
set(对象,值) ——向里面存值
get(对象) ——从里面取值
setAccessable(true)
可以修改私有属性被操作的状态
4.Method
操作Class类中的方法
class.getMethod
("方法名",参数对应的Class)//获取公有方法(本类和父类)
class.getMethods()
获取所有的方法(共有 自己+父类)
getDeclaredMethod("方法名字",参数类型的class...)
获取一个方法(自己类 共有 私有)
getDeclaredMethods()
获取全部方法(自己类 共有 私有)
获取构造方法
clazz.getConstructor(Class...参数类型)
eg:String.class
clazz.getConstructors()
clazz.getDeclaredConstructor()
获取自己类共有私有方法
clazz.getDeclaredConstructors()
Method类中的常用方法:
int modifiers = m.getModifiers()
获取方法的修饰符(权限加特征)
Class returnType = m.getReturnType()
获取返回值数据类型
String name = m.getName()
获取方法名字
Class[] parameterTypes = m.getParameterTypes()
获取方法参数列表的类型
Class[] exceptionTypes = m.getExceptionTypes()
获取方法抛出异常的类型
调用对象:
Object result=method.invoke(对象,执行方法需要传递的所有参数...)
若方法是私有方法 不允许操作
可以设置setAccessable(true) //设置方法使用权 准入
Constructor类中的常用方法:
con.getModifiers()//权限修饰符
con.getName();
con.getParameterTypes()
con.getExceptionTypes()
3.拓展
如何操作构造方法
执行一次 创建对象
Object=newInstance(执行构造方法时的所有参数)
con.setAccessible(true)
Spring: IOC控制反转 DI(依赖注入) AOC
DI是IOC的体现
IOC(Inversion Of Control) 对象的控制权反转
DI(Dependency Injection) 对象的控制权是别人的 别人创建对象的同时 帮我们注入属性值的过程