java reflect概念理解
看了网上很多材料,以及官方文档,真心觉得,很多时候需要自己消化理解了才行,别人的很多概念,并不好用,甚至有说错的。。
现总结如下:
1、jvm有个运行数据区,其中又划分为:方法区、堆区和栈区;跟java反射有关的是方法区。
2、容易误解的点:反射的实现,依靠的是个“类的镜子对象”(自个定义的囧),这样好理解些,官方定义是:类对象。。真是看吐了,那跟普通对象又有啥区别。还有些说这个“类的镜子对象”是一定要有创建类的普通对象的时候才会出现,真是扯淡。。
比如这样一串代码:Object o = new Object ();
首先运行程序时,扔给了jvm自动将程序跑起来,编辑阶段:代码会编译一个.class文件,然后再被类加载器将Object o加载进了内存中;内存方法区得知了一个叫Object的类,于是,就开始创建了一个“Object的镜子对象”,注意它并不是由new Object()创建出来的对象,后续反射通过java.lang.Class来动态捕获。
3、接下来理解就简单了,用法虽然很多,但是基本差不多。
无非是能对JVM运行程序期间,通过自主创建三类(Construction、Field、Method)对象实例,去读取并管理所有的类的所有信息:类、构造方法、属性和方法,以及方法、属性上的注解、泛型(某些情况下才行),且能动态创建对象。
4、反射的作用:
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。