JAVA反射机制及应用例子(二)

2014-11-24 02:43:08 · 作者: · 浏览: 1
//从字面意思可以看出来,这里找到所有的方法,即可以找到继承来的方法等
for(int i=0;i Method mee = med[i];
System.out.println("method # "+i+" name="+mee.getName());
System.out.println("declaring class ="+mee.getDeclaringClass());
//方法的参数类型
Class pvec[] = m.getParameterTypes();
for(int j=0;j System.out.println("parameter # "+j+" ="+pvec[j]);
}
//方法的异常
Class evec[] = m.getExceptionTypes();
for (int j = 0; j < evec.length; j++){
System.out.println("exception #" + j + " " + evec[j]);
}
//方法的返回类型
System.out.println("return type = " + mee.getReturnType());
}
System.out.println("---------------------------------------------------------------------");

/**
* //获取类的构造函数
*/
Constructor ctorlist[] = c.getDeclaredConstructors();
for(int i=0;i Constructor cons = ctorlist[i];
System.out.println("Constructor #"+i+" name="+cons.getName());
Class[] consParaType = cons.getParameterTypes();//获得构造函数的参数类型
if(consParaType.length==0){
System.out.println("Constructor have no parameters");
}else{
for(int j=0;j System.out.println("Constructor Parameter type #"+j+" name="+consParaType[j]);
}
}
}
System.out.println("---------------------------------------------------------------------");

/**
* //获取类的属性
*/
Field fieldlist[] = c.getDeclaredFields();
for(int i=0;i Field field = fieldlist[i];
System.out.println("Filed #"+i+" name="+field.getName());//属性名称
System.out.println("Filed #"+i+" type="+field.getType());//属性类型

int mod = field.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));//属性的修饰符 private/public/protected
}
System.out.println("---------------------------------------------------------------------");

/**
* //根据方法的名称来执行方法
*/
Class cls = Class.forName("com.xtlh.sinye.Goods");
Class partypes[] = new Class[2];
partypes[0] = String.class;//更多类型 Long.TYPE Integer.TYPE,或者使用Long.class、Integer.class
partypes[1] = Class.forName("java.lang.String");
Method meth = cls.getMethod("addName", partypes);
Goods goods = new Goods();
Object arglist[] = new Object[2];
arglist[0] = new String("love");
arglist[1] = new String("grape");
Object retobj = meth.invoke(goods, arglist);
String retval = (String) retobj;
System.out.println(retval);
System.out.println("---------------------------------------------------------------------");

/**
* 创建对象,根据指定的参数类型找到相应的构造函数并执行它,以创建一个新的对象实例。使用这种方法可以在程序运行时动态地创建对象,而不是在编译的时候创建对象,这一点非常有价值
*/
Class clss = Class.forName("com.xtlh.sinye.Goods");
Class partypess[] = new Class[2];
partypess[0] = String.class;