这个反射其实算是一道初级升中级的面试题,也是初级必须了解,中级必须了解并熟练使用的知识技能。反射就是在程序运行状态中,对于任何一个类,都能通过特定的方式方法获取到这个类的属性和方法,并且可以对这些属性、方法进行调用。
目录何为反射?反射(Reflection),是指Java程序具有 在运行期 分析类以及修改其本身状态或行为的能力 。通俗点说 就是 通过反射我们可以 动态地 获取一个类的所有属性和方法,还可以操作这些方法和属性。
java反射机制的实现原理:当一个字节码文件加载到内存的时候, jvm会对该字节码进行解剖,然后创建一个对象的Class对象,jvm把字节码文件的信息全部都存储到该Class对象中,我们只要获取到Class对象,我们就可以使用该对象设置对象的属性或者调用对象的方法等操作。
反射可以做的事情实在是太多太多了,并且我们一般都是拿来主义,不会去重复的造轮子,所以有想要使用的框架直接拿过来就用,然后调用框架里面已经写好的方法就可以实现我们想要的业务功能了,那么作为一个框架来说咱们如何能做到通用呢,因为我们不能在框架里面去实现我们具体的业务代码,所以这个时候反射就派上用场了。
反射机制是一个非常好用的机制,C#和Java中都有反射,反射机制简单来说就是在程序运行状态时,对于任意一个类,能够知道这个类的所有属性和方法,对于任意一个对象,能够调用它的任意属性和方法,其实初听就知道反射是一个比较暴力的机制,它可能会破坏封装性。
看一下官方的原文定义:Reflection is a feature in the Java programming language. It allows an executing Java program to examine or “introspect” upon itself, and manipulate internal properties of the program. For example, it's possible for a Java class to obtain the names of all its members and display them.