标签:src com tor 问题 注意 image pre field 构造
首先,看几个问题
1. Class和class有什么区别?
2. 获取类的字节码(Class)的几种方式
一个例子说明:
输出结果:
3. 概念
本来不想讲概念,因为网上有一大堆。而且,我觉得自己也讲不出什么新鲜花样来,但为了便于总结理解,还是说一句:
反射简单看来就是用一些特殊的类来表示普遍类中的一些成分(构造方法,成员属性,成员方法)。为什么?因为一切
皆对象嘛~由此就引出了Constructor,Field,Method等等类的意义和用法了。
4. Constructor类
表示的就是类中的构造方法,一般来说像getConstructors(),getFields(),getMethods()这种的,一看就知道是复数,表示所有的。
Constructor的用法直接来个例子
这些基本都是固定格式,基本上靠背,输出:
5. Field类
见名知意,Field表示的就是成员属性了。做Field类的测试时,先新建个FieldTest类:
接来下直接看用法,继续在ClassTest里编写以下代码:
输出:
注意:getField()和getDeclaredField的区别。因为成员属性一个是私有,一个是公有。getField()无法正常发现私有
成员,不信可以试试。而对于getDeclaredField(),如果不设置后面的setAccessible(true),即使能知道有这个Field,但也
用不了。
6. 练习案例一
学到这里,可以做一个简单的综合案例了:把某个类中所有String类型属性的值中b都换成a.
输出:
7. Method类
表示的就是成员方法了,直接看例子:
输出:
可以看到用法也很简单,相对直接。接下来,比如说如果想要执行某个类中的main方法,可以参考以下案例:
这里不用第一种方式直接调用时因为,实际情况下我们MainMethodTest这个类可能不是确定的,而是通过参数传入的:
输出:
8.数组的反射
这里先说几个概念,数组也是一种类;类型一样,维度一样的数组属于同一类:
输出:
来个问题,怎么使用反射输出数组里所有元素:
这样?:
输出:
发现String的没问题,int类型数组还是不行,这个就涉及到装包拆包的基础问题了。没办法,自己写个:
输出:
这下行了,反射的基础用法到这就差不多了。但是很多概念没总结出来,时间问题没办法。只能先学用法,后面有空
再把概念理解总结下咯。
标签:src com tor 问题 注意 image pre field 构造
原文地址:https://www.cnblogs.com/zhuqingxin/p/9357172.html