反射机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射机制相关的知识,希望对你有一定的参考价值。

反射机制:

反射机制是能够帮助我们把代码变得更加灵活,可扩展性更高,俗称“软编程、软写法”。例如:有一个文件里面有一些值,想要把这些值赋值到一个Student类的属性中,按照以前所学到的知识点,只能是通过文件流将文件里的值读取出来,然后再通过set方法将这些值都赋给Student类的属性。但是,这种方式是将代码写死了,在这之后会有一个问题就是如果文件里的内容发生变动,或者要把这个Student类更换成Dog类的话,就要重新修改代码。程序写好了部署到服务器上运行了,总不能时不时就打开来修改吧。
示意图:

image

那么要解决这个问题,就得使用到反射机制,在怎么使用反射机制解决这个问题之前,我们先学习一个类,这个类名叫Class,注意这是类不是class关键字。每一个类都能获得Class对象,通过这个对象就可以操作那个类。例如:Dog类可以获得Class对象,通过这个对象可以构建Dog类的对象,还可以对Dog类的属性进行赋值,对方法能够进行调用等等,还能获得这个类的所有的信息,比如这个类的父类是哪个,实现了什么接口,路径在哪等等。
获得Class对象的方法有三种,但是其中两种是死写法,一种是软写法,软写法是因为使用的字符串描述的类名,字符串是可以变动的,要更改类的时候只需要更改字符串即可。
代码示例:
image

使用这个对象可以获得Test类的信息:
image
运行结果:
image

使用这个对象可以获得Test类的成员:
image

运行结果:
image

使用这个对象还可以对某个类的的属性进行赋值,还能调用方法和构造器,还能给方法和构造器传递参数。我们做个试验:声明一个Student类,在这个类里写一些属性、方法和构造器,然后通过Test类来进行赋值、调用和传递参数。
Student类代码示例:
image

Test类代码示例:
image

运行结果:

image

现在我们就可以运用以上的知识点来解决一开始的那个问题了,先编辑一个文本里面写一些属性值,然后再写一个Teacher类写上对应的属性,然后将属性进行封装,然后写一个Test类通过Class对象来对Teacher类的属性进行赋值。
文件内容:
image
Teacher类代码示例:

image
image

Test类代码示例:

image

运行结果:

image

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

Java反射机制详解

反射机制在java中如何做呀?

Java Reflection (JAVA反射)机制详解

java反射机制

[转]Java反射机制详解

java 中反射机制和内省机制的区别是啥?