码迷,mamicode.com
首页 > 其他好文 > 详细

反射机制

时间:2020-06-06 09:22:59      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:cep   new   常用   ace   组件   对象   动态   dem   改变   

一、什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

二、反射能做什么?
我们知道反射机制允许程序在运行时取得任何一个已知名称的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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!