Java反射机制

来源:互联网 发布:mac怎么看电池循环 编辑:程序博客网 时间:2024/06/15 17:32
可以在eclipse的VM参数中设置-verbose:class 观察详尽的类加载过程,Java类均是实际运行中从代码区加载。


jdk内置多个classloader,按照bootstrap等class loader 由内至外。
1.bootstrap class loader,用C或者汇编编写为本地库(核心类包括下面两个Classloader的类,如果用String.class.getClassLoader()
去获取类名只能看到null)
2.extension class loader 如DES等类,其类名为: sun.misc.Launcher$ExtClassLoader
3.application class loader, 如用户的自定义类的ClassLoader通常为: sun.misc.Launcher$AppClassLoader
注意到后面两个类都被定义为Launcher的内部类的。当然也可以自定义classLoader.


bootstrap class loader -> ext class loader -> application class loader -> other class loader

这些classloader对象之间以引用的方式(getParent()函数,非继承,而是对象之间的引用)获取其上一层classloader的对象,

      

反射机制的原理其实就是Java的classLoader根据对应的类名将类的信息(属性,函数及其参数)从代码区加载进来,然后据此创建该类的对象,同时也可以查询其方法并调用。


创建一个反射类的对象,经历以下几步:
1. 创建类对象  Class c = Class.forName(str); //str即为类名,当然也可以写在配置文件中动态读取
2.根据类创建该对象
               Oject o = c.newInstance();
3.获取该类的方法
               Method[] methods = c.getMethods() ;
  methods[i].getName() ; //获取方法名称
  methods[i].getParameterTypes() ; //获取方法的参数名称和类型
4.调用该方法
               methods[i].invoke(o, params); //传入对象和参数                 
0 0
原创粉丝点击