欢迎来到天天文库
浏览记录
ID:38670802
大小:249.50 KB
页数:22页
时间:2019-06-17
《反射(reflection)学习整理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、反射学习整理【摘要】本文主要通过自己对反射机制的总结编写的文档,主要目的就是为了自己以后能可以参考温习也可以方便刚刚入门的同仁们学习指导,通过doc的编写相信可以在帮助别人的同时提高自己。Ø反射机制;ØReflectionAPI;Ø如何使用反射机制;Ø反射机制的应用举例;第一节反射机制什么是反射机制,说的通俗一些就是在java运行期间动态加载一些不确定的类对象,那么我们如何使用一个类的呢?当然大多数情况下我们是使用一个确定的类,然后通过在内存中的加载再使用之。其实在一个project中会有很多类,虚拟机并不是
2、在每一次运行时都将所有的类都进行加载然后解析的,是在我们使用的过程中才会被加载,这个大家可以看一下ClassLoader(在后期中我也会编写ClassLoader相关的文章总结)反射机制提供的功能:Ø加载运行时才能确定的数据类型;Ø解析类的结构,获取其内部的信息;Ø能够操作的类型或者实例;1.访问属性;2.调用方法;3.创建新的对象;以上的功能我会在接下来的文字中都进行阐述,然后每一个功能点都会通过代码的形式进行逐一的说明举例;1.1动态加载类Java虚拟机在运行是能加载的类型有如下几种:Ø类接口;Ø数组;Ø
3、枚举;Ø注解(Annotation,可以参见我的另一篇文档,《javaAnnotation学习文档》);Ø基本数据类型;在类加载的时候,JVM会自动加载上述类型对应的Class对象。packagecom.wangwenjun.demo;汪文君QQ:532500648,属于个人劳动成果,如需转载请标明出处,如果本文中有什么偏差的地方也希望大家和我交流让我及时纠正。importjava.util.ArrayList;publicclassReflectionDemo1{privatefinalstaticStri
4、ngLIST_STRING="java.util.ArrayList";//动态加载java.util.ArrayList的类路径@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args){try{Class>clazz=Class.forName(LIST_STRING);//通过反射获取运行时的ClassArrayListlist=(ArrayList)clazz.newInstance();//通过
5、newInstance方法获取Objectlist.add("hello");System.out.println(list.size()+":"+list.get(0));}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(InstantiationExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IllegalAccessExceptione){//TO
6、DOAuto-generatedcatchblocke.printStackTrace();}}}执行结果为:1:hello通过上面的代码我们可以总结出来使用Reflection大致需要如下的几步:Ø获取目标对象的Class对象;Ø调用Class对象内省方法获取目标对类成员信息;Ø访问目标类的成员属性;1.2解析类的结构通过第一步的操作,我们获取了目标对象的class之后就可以解析出来class对应的内部结构;别不多说直接上代码,来看看如何解析出来目标对象;我们定义一个Teacher类packagecom.w
7、angwenjun.demo;publicclassTeacher{privateStringusername;privateintage;汪文君QQ:532500648,属于个人劳动成果,如需转载请标明出处,如果本文中有什么偏差的地方也希望大家和我交流让我及时纠正。privatestaticinttotal;publicTeacher(){super();total++;}publicTeacher(Stringusername,intage){super();this.username=username;
8、this.age=age;total++;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publics
此文档下载收益归作者所有