首页 > 代码库 > JAVA 反射机制

JAVA 反射机制



JAVA 反射机制

学习目标:

1.理解Class

2.理解Java的类加载机制

3.学会使用ClassLoader进行加载

4.理解反射机制

5.掌握ConstructorMethodField

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,若想执行私有方法和获得私有属性需要methodfield:setAccessible(true)  暴力解除约束,       

FieldMethod对应学习,也有私有和公有的区别。


Java反射机制总结:

java反射机制被认为是java准动态语言的依据,各种高级应用中都提倡类中存在无参构造方法。在现在的开发设计中大量使用反射处理机制,很多框架都是利用了反射机制才实现的,比如Struts、Spring框架等,理解好反射处理机制对将来学习或自己开发设计框架很有帮助。

练习:

自己写一个invoke(StringName,MethodName,Object...args)   有点难度哦(要遍历父类)

1.要获得args对应的Class类型

2.要获得父类中的方法

获得父类  superClass


备注:反射机制非常重要,尤其是如果你将来自己设计框架的时候



备注:Java的反射机制是在运行时期获得类的信息的。

JAVA 反射机制