首页 > 代码库 > JAVA 反射机制
JAVA 反射机制
JAVA 反射机制
学习目标:
1.理解Class类
2.理解Java的类加载机制
3.学会使用ClassLoader进行加载
4.理解反射机制
5.掌握Constructor、Method、Field
6.理解并掌握动态代理
如何理解Class 类
对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现 了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。
Class 对象只能由系统建立对象
一个类在 JVM 中只会有一个Class实例
每个类的实例都会记得自己是由哪个 Class 实例所生成
Class可以这么理解:它管理所有类的信息,所有的类都对应有一个Class对象。
想使用反射第一步是获得对应的Class对象
类加载器:
1.System ClassLoader 系统类加载器
1.通过ClassLoader静态方法 getSystemClassLoader()获得
2.通过this.getClass().getClassLoader()获得
2.Extension ClassLoader 扩展类加载器
3.Bootstap ClassLoader 引导类加载器
最常用的一个方法
Classloader.getResourceAsStream();
获取Class对象的方法:
1.通过class属性来获得,类.class
2.通过具体对象的.getClass()方法来获得
3.通过Class.forName(具体包名类名); ----->最常使用的方法
Class对象clazz的主要方法:
1.产生一个具体对象 clazz.newInstance();
2.获得Method方法(一个方法数组或具体某个方法)
clazz.getMethods()和clazz.getMethod(String name,Class...parameterTypes)
还有一种是getDeclaredMethod同理
Method一个比较重要的方法: invoke(对象名字,可变参数);
3.获得构造方法Constractor (使用的机会很少)
4.获取Field clazz.getFields()和clazz.getField(String name)
同理有getDeclaredFields
若想获得私有的属性和方法就需要getDeclaredxxx,若想执行私有方法和获得私有属性需要method或field:setAccessible(true) 暴力解除约束,
Field和Method对应学习,也有私有和公有的区别。
Java反射机制总结:
java反射机制被认为是java准动态语言的依据,各种高级应用中都提倡类中存在无参构造方法。在现在的开发设计中大量使用反射处理机制,很多框架都是利用了反射机制才实现的,比如Struts、Spring框架等,理解好反射处理机制对将来学习或自己开发设计框架很有帮助。
练习:
自己写一个invoke(StringName,MethodName,Object...args) 有点难度哦(要遍历父类)
1.要获得args对应的Class类型
2.要获得父类中的方法
获得父类 superClass
备注:反射机制非常重要,尤其是如果你将来自己设计框架的时候
备注:Java的反射机制是在运行时期获得类的信息的。
JAVA 反射机制