JAVA基础之反射

首先,看几个问题

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类型数组还是不行,这个就涉及到装包拆包的基础问题了。没办法,自己写个:

输出:

这下行了,反射的基础用法到这就差不多了。但是很多概念没总结出来,时间问题没办法。只能先学用法,后面有空

再把概念理解总结下咯。

 

 

 

 


 

posted @ 2018-07-30 00:32  zhuqingxin  阅读(94)  评论(0编辑  收藏  举报