本节内容学习自《Java核心技术 卷一》
1.是什么?
先说反射库,java.lang.reflection提供了工具集,可以编写动态操作java代码的程序。比如java数组的动态扩展。这个功能被大量运用在JavaBeans中,是java组件的体系结构。
再说反射,能够分析类能力的程序叫做反射。
2.它能做什么?
-在运行中分析类的能力,比如查询该类的field,method,constructors
-在运行中查看对象,例如查看对象field中某一项的值,或者写一个toString方法供所有类使用
-实现通用的数组操作代码
-使用Method对象(类似于cpp中的函数指针)
3.Class类
Java运行时系统为所有对象维护一个被称作运行时的类型标识,这个标识跟踪着该对象所属的类,虚拟机利用运行时类型信息选择相应方法执行。保存这些信息的类就是Class。说白了就是说一个类会生成很多该类的对象吧,在运行时每个对象想要知道我可以调用什么方法吧?一个对象复制一份该类的方法列表不现实,肯定要在内存中维护一个Class对象保存方法。
如何获取Class对象呢?三种方法。
一,Object类的getClass()方法;
二,String className="java.util.Date";Class cl=Class.forName(className);
三,Class cl=int.class;
接下来的笔记按照2所讲的四个作用,通过四段代码来认识反射。
4.在运行中分析类的能力
反射机制最重要的内容是------检查类的结构,即它的field,method,constructor。



这里首先学到的是Class中getFields,getDeclaredFields等方法的使用,以及getModifiers方法,用Method时还有getReturnType,getParameterTypes等方法,学会使用这些方法,就可以查看想了解的关于类的一切内容。
5.在运行中查看对象


这里能学到的:第一,有了java类的对象后,取值。即Employee xxx=new Employee("harry hacker",35000,10,1,1989);Class t=xxx.getClass(); Field f=xxx.getDeclaredField("name");Object v=f.get(xxx);
第二,setAccessible()方法。第三,Field.get(xxx)方法如果返回一个double的话,会自动打包成Double,要强转一下
6.实现通用的数组操作代码

有人会说,那我每个类用到的时候写个CopyOf()函数就好了嘛,可是如果是通用的数组的话,就不太容易操作啦
7.使用Method对象

今天学了反射,总结一下,感觉其实不是笨,是见识太少了,还是要多学习。第二,我们不要和别人时刻比较,要知道自己要做什么,然后,默默的去做。感觉做技术是件幸福的事,虽然要时刻学习,可是谁告诉你不学习就能快乐?能够像个工匠一样打磨自己的技艺,打磨自己的心,未尝不是快乐。匠人,呵。
2018-9-1 与南京 江宁 梅园
-------------------------------------------------------------------------------------------------------------------------------------------------------接下来是反射的画龙点睛的地方,有助于大家理解:



网友评论