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

2014-11-24 11:27:42 · 作者: · 浏览: 26
s = (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.println(" 方法名称如下"+metd.getName());
System.out.println(" 修饰符==>"+Modifier.toString(metd.getModifiers()));
Class< >[] demoMethodParameters=metd.getParameterTypes();
for (Class< > demoMethodParameter:demoMethodParameters) {
System.out.println(" 参数=>"+demoMethodParameter.getName());
}
}
//如果Demo类中有方法getAnswerString,执行这个方法
Method invokeMetd = Class.forName("com.yinhai.reflect.domo.Demo")
.getDeclaredMethod("getAnswerString",String.class);
Class< > returnType = invokeMetd.getReturnType();
String result=(String)invokeMetd.invoke(Demo.class.newInstance(),"你好");
System.out.println("调用getAnswerString方法的返回值==>"+returnType.getSimpleName()+" 结果=>"+result);
//对数组的操作
System.out.println("使用发射对数组的操作如下:");
int[] temp={1,2,3,4,5};
Class< > demo=temp.getClass().getComponentType();
System.out.println(" 数组类型: "+demo.getName());
System.out.println(" 数组长度 "+Array.getLength(temp));
System.out.println(" 数组的第一个元素: "+Array.get(temp, 0));
Array.set(temp, 0, 20);
System.out.println(" 修改之后数组第一个元素为: "+Array.get(temp, 0));
//通过反射动态修改数组的大小
int[] newDemo = (int[])Array.newInstance(demo,20);
System.arraycopy(temp, 0, newDemo, 0,Array.getLength(temp));
StringBuffer intArraySb = new StringBuffer();
for(int i:newDemo){
intArraySb.append(i).append(";");
}
System.out.println("扩展之后的数组内容为:"+intArraySb.toString());
//类加载器
/**
* 其实在java中有三种类类加载器。
* 1)Bootstrap ClassLoader 此加载器采用c++编写,一般开发中很少见。
* 2)Extension ClassLoader 用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类
* 3)AppClassLoader 加载classpath指定的类,是最常用的加载器。同时也是java中默认的加载器。
* */
System.out.println(Demo.class.getClassLoader().getClass().getN