一 什么是反射
无法通过new 关键字来获取对象并调用方法,通过JDK提供的反射API来进行反射调用,反射是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,获取相关方法。
反射原理:每一个类 在JVM中都是Class类的对象,且Class对象唯一, 每个对象在编译成Class对象时,会在.class文件末尾保留类的源数据信息,包括路径 类名 属性 方法 继承关系
二 反射使用
1 反射获取对象Class
反射获取对象参数是完整报名+类名,其内部实现如下:
内部实现第二个参数boolean值如果为true,则会执行对象的初始化过程,static代码块会被执行
2 获取对象
该方法要求必须有空参数的构造方法3 获取方法并调用:
获取构造方法:
第一个是获取全部构造方法,第二个是获取指定参数的构造方法,参数传构造方法的参数类型构造方法调用:
构造方法 通过newInstance调用普通方法获取:
//获取所有非privite方法,包括从父类继承来的方法
Method[] methods1 = cClass.getMethods();
//获取所有方法,包括privite方法,但仅限于该类
Method[] methods1 = cClass.getDeclaredMethods();
//获取特定方法,第一个参数是方法名,第二个参数是方法的参数类型
cClass.getDeclaredMethod("setNumber",Integer.TYPE);
方法调用:
私有方法调用 非私有方法调用4 获取属性
根据属性名反射非私有属性值 根据属性名反射私有属性并赋值三 总结
反射是在运行时获取,先天比new 要慢。
网友评论