java中反射的原理

来源:互联网 发布:linux nc 编辑:程序博客网 时间:2024/05/29 07:42

简单的回忆下,下次做具体的分析。

首先有一个反射包,这个包里有这些类,

方法类:放类里的一些方法,

构造方法类,放构造方法信息;

字段类,放类的一些字段信息,

Class类,这个类的类型信息,一个类在编译完后会形成一个.class文件,这个文件里会有一个Class类存放这个类的类型信息。


运行期间,我们如果要产生某个类的对象。jvm会根据.class类来找Class对象,并把他加载到内存中(如果已经加载到了内存,就不会在加载了)。加载到内存后呢,以后就都会用这个Class来产生该类型的所有对象了。


所谓的反射就是,通过类加载器ClassLoader去加载这个类的Class对象Class c1 = Class.forName(className),这里会先从内存里去找,如果没有找到就把这个Class放到内存中。然后通过这个Class对象.newInstance()拿到类实例,Object c = c1.newInstance();得到对象后就可以拿到这个类的所有方法了,并且可以拿到方法的参数列表,然后通过invoke方法就可以执行这个类的方法了。

0 0