1,什么是反射?
java的反射,允许程序在运行时,创建一个对象,获取一个类的所有相关信息等。
2,class类
要了解反射,就绕不开class
类。
我们平时开发的类,例如classa,一般会有一些属性,会有几个构造方法,也会有一些普通方法,我们还可以使用classa来创建对象,例如classa classa = new classa()
。
java程序在运行时,其实是很多类的很多个对象之间的协作。jvm
如何管理这些类呢?它如何知道各个类的名称,每个类都有哪些属性和哪些方法呢?
jvm
会给每个类,创建一个class类型的对象,来记录各个类的信息,包括类的名称,类有哪些属性,各个属性的类型,类有哪些方法,各个方法的名称参数列表返回值等。我们可以说classa是所有classa类型的对象的类,同理,我们也可以说,class是所有class类型对象的类,而class类型的对象,也就是其他的所有的类。
3,可以获取类的哪些信息呢?
可以获取类的名称,类的构造函数,类的属性,类的普通方法等。
4,如何使用获取到的类的信息呢?
首先看一下如何使用获取到的类的方法。
jvm
提供了method
类,来表示类的方法,我们获取到的一个类的方法,其实就是method的对象。
从class
获取方法的方式为,调用getmethod()
方法,第一个参数为方法名称,后面是待获取的方法的参数的类型列表。
而调用获取到的方法时,也比较特殊,是调用method
的invoke
方法,第一个参数为调用哪个对象的该方法,后面是需要给该方法传递的参数列表。
1
2
3
|
object obj = myclass. class .newinstance();
method method = myclass. class .getmethod( "methodname" , string. class , string. class );
method.invoke(obj, "a" , "b" );
|
jvm
提供了constructor
来表示类的构造方法,提供了field
来表示类的属性,其使用方法与method
的类似。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/li_canhui/article/details/84562302