java反射机制——解析(2)

来源:互联网 发布:java求二叉树的节点数 编辑:程序博客网 时间:2024/05/16 18:33

在上一篇已经介绍java反射机制定义和事例,这篇主要介绍怎么使用Class,Field,Method,Constructor对象的使用

1、Class类对象的使用

可以通过Constructor 类调用有参构造方法完成对象的实例化操作

public class DumpMethods {public static void main(String[] args) {try {// 定义一个Person实例对象Person man = new Person("测试", 30);//获取类对象Class manClass=man.getClass();Class param[]=new Class[2];param[0]=java.lang.String.class;param[1]=Integer.TYPE;//获取带两个参数的构造函数Constructor manCon=manClass.getConstructor(param);Object ob[]=new Object[2];ob[0]=new String("zjh");ob[1]=new Integer(100);//根据Class类对象调用对应的构造函数生成实例对象Person newMan=(Person)manCon.newInstance(ob);System.out.println("name=    "+newMan.getName());System.out.println("age=     "+newMan.getAge());} catch (Throwable e) {System.err.println(e);}}}

输出结果:

name=    zjh
age=     100

2)Field对象使用

public class DumpMethods {public static void main(String[] args) {try {// 定义一个Person实例对象Person man = new Person("测试", 30);Class manClass=man.getClass();//下面这种获取属性对象,该属性必须是publicField nameField=manClass.getField("name");//下面这种对属性是否public活private没有要求Field ageField=manClass.getDeclaredField("age");
//这里面设置值只能是public,private的不能设置
nameField.set(man, "ceshi");System.out.println(man.getName());} catch (Throwable e) {System.err.println(e);}}}输出结果:
 

ceshi

3)method对象的使用

public class DumpMethods {public static void main(String[] args) {try {// 定义一个Person实例对象Person man = new Person("测试", 30);Class manClass=man.getClass();Class paramName[]=new Class[1];paramName[0]=java.lang.String.class;Method nameMethod=manClass.getMethod("setName", paramName);nameMethod.invoke(man, "zjh");System.out.println("man对象name==="+man.getName());} catch (Throwable e) {System.err.println(e);}}}输出结果:
man对象name===zjh
4)constructor对象的使用
public class DumpMethods {public static void main(String[] args) {try {// 定义一个Person实例对象Person man = new Person("测试", 30);//获取类对象Class manClass=man.getClass();Class param[]=new Class[2];param[0]=java.lang.String.class;param[1]=Integer.TYPE;//获取带两个参数的构造函数Constructor manCon=manClass.getConstructor(param);Object ob[]=new Object[2];ob[0]=new String("zjh");ob[1]=new Integer(100);//根据Class类对象调用对应的构造函数生成实例对象Person newMan=(Person)manCon.newInstance(ob);System.out.println("name=    "+newMan.getName());System.out.println("age=     "+newMan.getAge());} catch (Throwable e) {System.err.println(e);}}}