java中反射的原理
2015-12-17 18:15
309 查看
简单的回忆下,下次做具体的分析。
首先有一个反射包,这个包里有这些类,
方法类:放类里的一些方法,
构造方法类,放构造方法信息;
字段类,放类的一些字段信息,
Class类,这个类的类型信息,一个类在编译完后会形成一个.class文件,这个文件里会有一个Class类存放这个类的类型信息。
运行期间,我们如果要产生某个类的对象。jvm会根据.class类来找Class对象,并把他加载到内存中(如果已经加载到了内存,就不会在加载了)。加载到内存后呢,以后就都会用这个Class来产生该类型的所有对象了。
所谓的反射就是,通过类加载器ClassLoader去加载这个类的Class对象Class c1 = Class.forName(className),这里会先从内存里去找,如果没有找到就把这个Class放到内存中。然后通过这个Class对象.newInstance()拿到类实例,Object c = c1.newInstance();得到对象后就可以拿到这个类的所有方法了,并且可以拿到方法的参数列表,然后通过invoke方法就可以执行这个类的方法了。
首先有一个反射包,这个包里有这些类,
方法类:放类里的一些方法,
构造方法类,放构造方法信息;
字段类,放类的一些字段信息,
Class类,这个类的类型信息,一个类在编译完后会形成一个.class文件,这个文件里会有一个Class类存放这个类的类型信息。
运行期间,我们如果要产生某个类的对象。jvm会根据.class类来找Class对象,并把他加载到内存中(如果已经加载到了内存,就不会在加载了)。加载到内存后呢,以后就都会用这个Class来产生该类型的所有对象了。
所谓的反射就是,通过类加载器ClassLoader去加载这个类的Class对象Class c1 = Class.forName(className),这里会先从内存里去找,如果没有找到就把这个Class放到内存中。然后通过这个Class对象.newInstance()拿到类实例,Object c = c1.newInstance();得到对象后就可以拿到这个类的所有方法了,并且可以拿到方法的参数列表,然后通过invoke方法就可以执行这个类的方法了。
相关文章推荐
- ECharts Java 动态加载数据,echartsjava
- Spring事务配置的五种方式
- [Java异常]ClassNotFoundException in Java
- Java字符串热点问题汇总
- java synchronized
- java 动态编译 方法内联
- Java Annotation
- Java synchronized
- 【Java并发编程实战】-----“J.U.C”:AQS分析(一)
- mac下eclipse安装lombok
- JavaWEB
- Windows环境下如何方便快捷的执行jar文件
- 【Java并发编程实战】----- AQS(一):简介
- JAVA通过JXL工具操作EXCEL文件
- Java开启定时任务线程
- eclipse搭建maven SpringMVC项目
- JAVA获取classPath的方法
- 关于java代码中的位运算的使用
- <s:hidden>标签的使用
- 用JAVA代码获取Weblogic配置的JNDI 数据源连接