Java的Reflect反射基础API练习 (一)

2014-11-24 11:27:42 · 作者: · 浏览: 28

在昨天的项目里面需要实现如下需求“将一个传过来的对象转成XML字符串,将XML字符串转为一个指定的对象”,必须用到反射进行高度定制,于是晚上结合网上的一些反射的博客,顺道复习一下反射的一些API基础,代码如下,后面备查:
[java]
package com.yinhai.reflect.mainMethod;

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import com.yinhai.reflect.domo.Demo;
import com.yinhai.reflect.domo.DemoInterface;

public class ReflectTester {
public static void main(String[] args)throws Exception {
DemoInterface inter = new Demo();
//获取当前对象的完整路径
System.out.println("当前对象完整路径==>"+inter.getClass().getName());
//获取当前对象的名字
System.out.println("当前对象类名=>"+inter.getClass().getSimpleName());
//实例化一个CLASS对象,method 1
Demo demo1 = (Demo)Class.forName("com.yinhai.reflect.domo.Demo").newInstance();
System.out.println("反射得到的Demo m1==>"+demo1.getClass().getName());
//实例化一个CLASS对象,method2
Class< > demo2 = Demo.class;
System.out.println("反射得到的Demo m2==>"+demo2.newInstance().getClass().getName());
//实例化一个DEMO对象 这个里面注意,使用newInstance()的时候,对象应该有一个午餐构造,否则会报错
Demo demoObj = (Demo)Class.forName("com.yinhai.reflect.domo.Demo").newInstance();
demoObj.setAac001("123124124");
System.out.println("实例化一个Demo对象中的aac001==>"+demoObj.getAac001());
//通过CLASS对象获取该类中的构造函数
Constructor< >[] constructorArray = Class.forName("com.yinhai.reflect.domo.Demo").getConstructors();
Demo demoByCons = (Demo)constructorArray[0].newInstance("123456789","987654321");
System.out.println("通过构造器==>"+constructorArray[0]+"得到Demo,其属性aac001 ==>"+demoByCons.getAac001());
//通过CLASS对象获取该类实现的接口

Class< >[] intfes = Demo.class.getInterfaces();
StringBuffer intesSb = new StringBuffer();
for (Class< > intf:intfes) {
intesSb.append(intf.getName()+";");
}
System.out.println("Demo类实现的接口如下==>"+intesSb.toString());
//通过CLASS对象获取该类的父类
Class< > supClass = Demo.class.getSuperclass();
System.out.println("Demo类继承的父类如下==>"+supClass.getName());
//获取CLASS对象的构造方法
Constructor< >[] cons = Demo.class.getConstructors();
StringBuffer consSB = new StringBuffer();
for(Constructor< > con:cons){
consSB.append(con.toString()+";");
}
System.out.println("Demo类中的构造方法如下==>"+consSB.toString());
//具体分析构造方法
Constructor< >[] consDetails = Demo.class.getConstructors();
System.out.println("Demo构造方法详细解析如下:");
for(Constructor< > con:consDetails){
System.out.println(" 构造方法==>"+con);
int modifNum = con.getModifiers();
System.out.println(" 修饰符=>"+Modifier.toString(modifNum));
Class< >[] parats=con.getParameterTypes();
for(Class< > parat:parats){
System.out.println(" 参数类型>"+parat.getName());
}
}
//反射Demo类中的方法
Method[] metds = Class.forName("com.yinhai.reflect.domo.Demo").getDeclaredMethods();
System.out.println("Demo中的方法详细如下:");
for (Method metd:metds) {
System.out.prin