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)  对象的控制权是别人的 别人创建对象的同时 帮我们注入属性值的过程                            
posted @ 2020-10-18 19:16  Zh'Blog  阅读(116)  评论(0编辑  收藏  举报