一 反射机制的概念:
指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制.
二 反射机制的应用:
生成动态代理,面向切片编程(在调用方法的前后各加栈帧).
三 反射机制的原理:
1 首先明确的概念: 一切皆对象----类也是对象.
2 然后知道类中的内容 :modifier constructor field method.
3 其次明白加载: 当Animal.class在硬盘中时,是一个文件,当载入到内存中,可以认为是一个对象,是java.lang.class的对象.
当运行程序时,实例化时产生Animal.class对象,这两个对象有什么区别?
如下图,上面的Animal.class对象是java.lang.class的对象;下面的对象是Animal.class实例化产生的对象
反射机制简单实例代码
com.demo.util.com.demo.util
public class ReflectDemo { public static void refTest(){ String className = "com.demo.util.TestConnection" ; Object o = null ; try { // 通过反射机制,使用类装载器,装载该类 Class<?> cl = Class.forName(className) ; //输出反射得到的类 System.out.println(cl); //创建该类的实例,转化为接口 o = cl.newInstance() ; //获取某个特定的方法 通过:方法名+形参列表 Method method = cl.getDeclaredMethod("testConnection" , Integer.class) ; // 通过反射机制执行方法 Object retValue = method.invoke(o , 5 ); System.out.println(retValue); } catch (Exception e) { e.printStackTrace() ; } } public static void main(String[] args) { refTest() ; } } com.demo.util.TestConnectionpublic class TestConnection { public TestConnection(){ System.out.println("This is TestConnection !!! "); } public Integer testConnection(Integer time){ System.out.println("This is TestConnection's testConnection() !!! "); return time ; } }