框架很多内容都是基于java基础里面的反射机制而来的,很多时候就搞不明白怎么就可以这样子,今天我们就来写一篇关于java反射机制的文章记录一下,到底什么是反射,以及怎么用的,什么时候用哪种方式,作用是什么,在这里今天都能看到。
啥玩意,这也太官方了,一听这解释人都有点懵了。 不怕,我们直接上图: 所谓的反射小编认为就是字节码文件加载到内存中去时的这个过程,在这个过程中我们可以通过一些相关操作去调用到原java类里面的属性和方法,这就叫反射。
代码如下(以上图示例):
创建字节码对象有三种方式: 第一种:Class.forName("该类的全限定名"); 比如: Class.forName("com.zhiyuan.frank.Person"); 第二种:类名.class; 比如: Person.class 第三种:对象名.getClass(); 比如: Person p = new Person(); p.getClass();字节码文件加载到内存之后,源文件里面的成员变量和成员方法都被抽象成了内存空间中的一个对象,所以有了字节码对象之后,想要调用里面的成员方法就调用获取成员方法的方法,比如getMethod();想要获取成员属性就调用获取成员属性的方法,比如getFiled();
总而言之首先就是要创建字节码对象,有了字节码对象就能拿到加载到内存里面的方法信息,拿到了方法对象就可以调用invoke去执行原文件的方法了。这个过程就是反射。 Class.forName()这种情况下多用于加载配置时或者使用jar包里面的类时。比如jdbc连接数据库就是用这种方式加载的驱动. 类名.class这种情况多用于传递实际参数的时候 对象名.getClass()这种情况多用于原文件的对象类已经具备的时候