说说反射的⽤途及实现
反射的核⼼是JVM在运⾏时才动态加载类或调⽤⽅法/访问属性,它不需要事先(写代码的时候或编译期)知道运⾏对象是谁。⼀、Java反射框架主要提供以下功能:
1.在运⾏时判断任意⼀个对象所属的类;
2.在运⾏时构造任意⼀个类的对象;
3.在运⾏时判断任意⼀个类所具有的成员变量和⽅法(通过反射甚⾄可以调⽤private⽅法);
4.在运⾏时调⽤任意⼀个对象的⽅法
⼆、主要⽤途:
1、反射最重要的⽤途就是开发各种通⽤框架。
三、基本反射功能的实现(反射相关的类⼀般都在lfect包⾥):
1、获得Class对象
使⽤Class类的forName静态⽅法
直接获取某⼀个对象的class
调⽤某个对象的getClass()⽅法
2、判断是否为某个类的实例
⽤instanceof关键字来判断是否为某个类的实例
3、创建实例
使⽤Class对象的newInstance()⽅法来创建Class对象对应类的实例。
先通过Class对象获取指定的Constructor对象,再调⽤Constructor对象的newInstance()⽅法来创建实例。
4、获取⽅法
getDeclaredMethods()
5、获取构造器信息
getDeclaredMethods()
getMethods()
getMethod()
6、获取类的成员变量(字段)信息
getFiled: 访问公有的成员变量
getDeclaredField:所有已声明的成员变量。但不能得到其⽗类的成员变量
getFileds和getDeclaredFields⽤法
7、调⽤⽅法
invoke()
java反射获取父类属性8、利⽤反射创建数组
四、注意:
由于反射会额外消耗⼀定的系统资源,因此如果不需要动态地创建⼀个对象,那么就不需要⽤反射。
另外,反射调⽤⽅法时可以忽略权限检查,因此可能会破坏封装性⽽导致安全问题。
原⽂:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论