A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© OMG 中级黑马   /  2012-3-17 12:10  /  4404 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在什么情况下可以体现反射的价值呢?
使用反射是否也有什么缺点呢?
求指点!!

2 个回复

倒序浏览
反射,就像我们照镜子,镜子中又出现一个自己(比喻可能不太恰当,但是足以表达清楚意思了).反射技术提供了一种通用的动态连接程序组件的方法,不必要把程序所需要的目标类硬编码到源程序中,从而使得我们可以创建灵活的程序.

Java的反射机制是通过反射API来实现的,它允许程序在运行过程中取得任何一个已知名称的类的内部信息.反射API位于java.lang.reflect包中.主要包括以下几类:

1).Constructor类:用来描述一个类的构造方法

2).Field类:用来描述一个类的成员变量

3).Method类:用来描述一个类的方法.

4).Modifer类:用来描述类内各元素的修饰符

5).Array:用来对数组进行操作.

Constructor,Field,Method这三个类都是JVM(虚拟机)在程序运行时创建的,用来表示加载类中相应的成员.这三个类都实现了java.lang.reflect.Member接口,Member接口定义了获取类成员或构造方法等信息的方法.要使用这些反射API,必须先得到要操作的对象或类的Class类的实例.通过调用Class类的newInstance方法(只能调用类的默认构造方法)可以创建类的实例.这样有局限性,我们可以先冲类的Class实例获取类需要的构造方法,然后在利用反射来创建类的一个实例.

回复 使用道具 举报
反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性;
缺点是对性能有影响;
Class类是用来描述内存中的字节码文件的, 该类的对象就是内存中加载的字节码文件.
获取Class对象有三种方式: 1: Class.forName(String) 通过字符串形式的类名获取Class对象 2: 类名.class 直接获取指定类的Class对象 3: Object.getClass() 获取指定对象的Class对象; Class类的newInstance()方法可以根据字节码文件创建对象,要是无参的构造函数; getConstructor(Class...)可以根据参数类型获取到该类的构造函数;
Constructor类: newInstance(Object...)可以调用构造函数创建对象, 传入指定参数;
Method类: invoke(Object, Object...)可以在指定对象上运行方法, 并且传入参数, setAccessible(boolean)方法可以设置访问权限, 可以将私有方法设置为可见;
Field类: set(Object, Object)可以将指定对象的成员变量设置为指定值, get(Object)可以获取指定对象的属性值, setAccessible(boolean)方法可以设置访问权限, 可以将私有属性设置为可见;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马