您的位置:首页 > 编程语言 > Java开发

Java学习笔记之反射机制初探

2014-09-14 12:49 405 查看
在Java中有一个反射(reflect)机制.其实质是Sun公司官方推出的一组API.其主要作用是用来编写工具以及框架.比如我们每天都在使用的Eclipse.要了解反射机制,只需要掌握四个类即可:Class,Field,Method,Constructor.他们分别代表一个类的类对象,成员变量,成员方法和构造方法.下面来一一对其进行理解.

一. Class

首先,我们要明白Class的含义.它是所有类的类.听起来有点拗,其实很容易理解,所有的类其实都是Class类的一个对象,称为类对象.而这些类新建出来的实例叫做类的对象.

Class是反射机制的起点,也就是说,要想进行反射操作,就必须先获得类对象,然后通过类对象新建类的对象,或者获得属性对象,方法对象和构造方法对象等.获得类对象有三种方法:

Class<?> c1 = 类名.class ;

Class<?> c2 = 类的对象.getClass();//从Object类继承的方法

Class<?> c3 =Class.forName("包名. 类名");//Class类的静态方法

这三种方法实质都是一样的,但一般建议采用第三种方式.值得注意的是,一个类的类对象只有一个.c1,c2,c3其实是相等的.

获得了类对象之后,可以调用它的newInstance() 方法来获取类的对象了.

二.Field

Field即属性的意思,一个类的成员变量可以作为Field的对象存在.获取属性的方法是:

Field[] fs1 = c1.getDeclaredFields();//获得所有属性

Filed[] f = c1.getDeclaredField(String fieldName);//获得指定属性

其中Declared表示声明的意思,这个方法可以获取到已声明但还未赋值的属性,如果不加,就只能获取已经初始化的属性.所以,我们一般使用上面两个方法.获得Field对象之后,我们就可以给对象属性赋值了,

setAccessible(true); //这一步是将私有属性设为可访问

f.set(类的对象,对应的值);//第一个参数表示这个类的对象,第二个参数表示要赋的值.

三.Method

与Field类似,获取和调用的方法分别是:

Method m1 = c1.getDeclaredMethod(String MethodName,Class<?>...paramClass);

m1.invoke(类的对象,实际参数的值);//第二个参数传方法的参数,有几个就传几个,没有就不写

四.Constructor

Constructor cs = c.getDeclaredConstructor(参数的类对象);

Object obj = cs.newInstance(构造方法的参数);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: