JAVA基础之反射

Posted zhuqingxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类型数组还是不行,这个就涉及到装包拆包的基础问题了。没办法,自己写个:

技术分享图片

输出:

技术分享图片

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

再把概念理解总结下咯。

 

 

 

 


 



以上是关于JAVA基础之反射的主要内容,如果未能解决你的问题,请参考以下文章

java 反射代码片段

Java基础学习笔记二十三 Java核心语法之反射

Java基础之反射

java基础之----反射

Java 基础之详解 Java 反射机制

Java基础之反射