JavaSE基础 (三十三)

反射 reflect

类是用来描述一组类

反射机制认为是描述一组类

Class           用来描述类本身
Package         用来描述所属类的包
Field           用来描述类中的属性
Method          用来描述类的方法
Constructor     用来描述类中的构造方法
Annotation      用来描述类中的注解

如何获取Class

如何下三种方式
Class    clazz = Class.for.Name("包名.类名")
Class    clazz = 类名.class;
Class    clazz = 对象.getClass();//Object类中的方法

Class中的常用方法

int result = getModifiers();   获取类的修饰符(权限 特征)
每一个修饰符 用一个整数来进行表示
0开始----0-1-2-4-8-16-32--64-128-256-512-1024
0---默认不写  1---public         2---private    4---protected 8---static
16---final    32----sychronized  64---voliate   128---trasnsient
256---native  512---interface    1024---abstract
String name = getName(); 获取名字
String simpleName = getSimpleName();简单名
Package p = getPackage();
p.getName();
Class sclazz = getSuperClass();//获取父类
Class[] classes = getModifiers();
Object obj = newInstance();//默认调用无参构造方法创建对象
Filed f = getField("属性名");
Field[] fs = getField();
如上两个方法只能获取公有属性 但是包含继承过来父类属性
getDeclaredField("属性")
Field[] fs =getDeclaredFields();
如上的两个方法能获取公有和私有的属性 但是只能获取本类中的属性

Filed类中常用方法

int = getModifers()
Class = getType()
String = getName()
操作属性 向里面存值
set(对象,值)
操作属性 从里面取值
值 = get(对象)
对象 =new():// 创建对象空间 当前对象空间有自己的一套元素(属性 方法)    
setAccessable(true)可以修改属性设备操作

如何操作类中的方法

Class类中的方法
Method m = class.getMethod("方法名",Class...参数类型);  获取公有方法(自己类+父类)
Method[] = clazz.getMethod();获取所有的方法(公有 自己+父类)
Method = getDeclaredMethod("方法名字",参数类型class...)获取所有的方法(自己类 公有 私有)
Method = getDeclaredMethods()   获取全部的方法(自己类 公有加私有)
获取构造方法
Construct = clazz.getConstructor(class...参数类型)

Method类中常用的方法

int mm = m.getModififers()//获取方法的修饰符(权限+特征)
Class mrt = m.getReturnType();//获取返回值数据类型
String mn= m.getName();//获取方法名字
Class[] mpts = m.getParameterTypes();//获取方法参数列表的类型
Class[] mets = m.getExceptionTypes();//获取方法抛出异常类型
如何操作方法
调用方法 让他执行一次
Object result = invoke(对象.执行方法需要传递的所有参数)
若方法是私有方法 不许与操作
可以设置setAccessable(True)设置方法使用权准入

Constructor类中的常用方法

con.getModifiers();
con.getName();
con.getParamenterTyper();
con.getExceptionTypers()
如何操作构造方法
执行一次 创建对象
Object = newInstance(执行构造方法时的所有参数);