标签:cep new 常用 ace 组件 对象 动态 dem 改变
一、什么是反射?二、反射能做什么?
我们知道反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括包括其modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变fields内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是需要注意的是反射使用不当会造成很高的资源消耗!
dbc 加载驱动、Spring IOC等框架都用到了反射机制。
三、反射的原理?
1.将Java文件保存到本地硬盘
2.编译Java文件,生成.class文件
3.使用Java虚拟机(JVM)将字节码文件加载到内存
4.字节码文件在内存中使用Class类表示
5.使用反射的时候,首先获取到Class类,就可以得到class文件里的所有内容,包含属性、构造方法、普通方法
6.属性通过Filed类表示
7.构造方法通过Constructor表示
8.普通方法通过Method表示
四、创建Class对象的常用方式
1.通过 Class 对象的 forName() 静态方法来获取,用的最多
try { //使用类的完整路径创建对象,获得Class对象 Class<?> aClass = Class.forName("demo.Student"); //根据Class对象创建Student对象 Student student = (Student)aClass.newInstance(); student.setName("张三"); System.out.println(student.getName()); //根据Class对象获取所有的方法,包括私有的 Method[] declaredMethods = aClass.getDeclaredMethods(); for(Method m:declaredMethods){ System.out.println(m.getName()); } //获取属性,包括私有的 Field[] fields = aClass.getDeclaredFields(); for(Field f:fields){ System.out.println(f.getName()); } //获取构造方法 Constructor<?>[] constructors = aClass.getConstructors(); for(Constructor c:constructors){ System.out.println(c.getName()); } } catch (Exception e) { e.printStackTrace(); }
标签:cep new 常用 ace 组件 对象 动态 dem 改变
原文地址:https://blog.51cto.com/14822910/2501665