Java反射机制(Reflection)浅析
Reflection也就是反射,是Java语言的一个重要特征,我们知道,在使用一个类之前,我们往往都已经创建好它了,比如创建一个类文件,然后再写些属性、方法等,也就是这种类是静态的,但反射机制却允许你动态地创建一个类。除了动态地创建一个类外,我们还能动态地获取同类对象的数据,并将这些数据赋给新创建的类,这有点类似克隆复制。在很多时候,我们都需要这种动态创建类的特征,比如在处理一些业务,但这些业务却又稍有区别的时候,往往对应着多个类,在处理的时候,我们就要根据不同的业务处理来调用不同的类,这个时候反射机制就派上用场了。 下面通过两个简单例子来说明反射的用法,首先先创建一个Person类: 复制代码 代码如下: package test; public class Person { private int age; private String name = ""; private String[] arr = new String[2]; public Person(){} public Person(String name,int age){ public int getAge() { public void setAge(int age) { public String getName() { public void setName(String name) { public String[] getArr() { public void setArr(String[] arr) { } 实例1:得到Person类的属性及方法信息 复制代码 代码如下: private static void testSimpleReflect(){ String className = "test.Person"; try { Class c = Class.forName(className); Field[] fields = c.getDeclaredFields(); Method[] m = c.getDeclaredMethods(); for (Field field : fields){ System.out.println(field.getName()); } for (Method method : m){ System.out.println(m.getClass()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } 这种是非常简单的,通过类所在包路径来得到一个类,在实际的工作中,也是使用最多的。 实例2:对象复制 复制代码 代码如下: @SuppressWarnings("unchecked") 利用反射来实现对象的复制,我们通常不用自己这么干,因为开源系统BeanUtils已经替我们做好对象拷贝的封装了,我们直接调用它的方法即可,但值得注意的是,BeanUtils也是基于反射机制来做的封装 下面是一调用: 复制代码 代码如下: public static void main(String[] args){ Person person = new Person("tom",22); String[] strs = new String[]{"a","b"}; person.setArr(strs); try { Person p = (Person)copy(person); System.out.println(p.getName()+">>"+p.getAge()); for (String str : p.getArr()){ System.out.println(str); } } catch (Exception e) { e.printStackTrace(); } // testSimpleReflect(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |