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

2014-11-24 11:27:42 · 作者: · 浏览: 24
tln(" 方法名称如下"+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().getName());
}
}

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 demoByCon