Java反射

2018-09-01  本文已影响0人  MaughamRick

本节内容学习自《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.实现通用的数组操作代码

此处的核心就是把Array作为一整个Object来考虑。

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

7.使用Method对象

这里重要的是invoke函数的使用。

今天学了反射,总结一下,感觉其实不是笨,是见识太少了,还是要多学习。第二,我们不要和别人时刻比较,要知道自己要做什么,然后,默默的去做。感觉做技术是件幸福的事,虽然要时刻学习,可是谁告诉你不学习就能快乐?能够像个工匠一样打磨自己的技艺,打磨自己的心,未尝不是快乐。匠人,呵。

2018-9-1 与南京 江宁 梅园

-------------------------------------------------------------------------------------------------------------------------------------------------------接下来是反射的画龙点睛的地方,有助于大家理解:

上一篇 下一篇

猜你喜欢

热点阅读