---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一.获取字节码对象:
1.通过类获取
Class class=类名.class;
2.通过实例对象获取
Class class=对象.getClass();
3.通过Class类的静态方法forName
Class class=Class.forName(String className);
二.获取构造方法(公共的)
//获取目标类的有参构造方法 其构造方法的参数为(int a,String b);
Constructor cons=类名.class.getConstructor(int.class,String.class);
//获取默认构造方法
Constructor cons=类名.class.getConstructor();
//通过获取到的构造方法对象,来获取目标类的实例对象。
类 对象变量=(类)cons.newInstance();
类 对象变量=(类)cons.newInstance(2,"k");
三.获取字段
获取公共的字段
AA a = new AA(21, "xiao");
Field field = AA.class.getField("name");//通过字节码对象获取字段名为“name”的公共字段
field.set(a, "oaix"); //设置a对象中"name"属性的值
System.out.println(a.getName());
暴力访问字段
AA a = new AA(21, "xiao");
Field field = AA.class.getDeclaredField("name");//通过字节码对象获取字段名为“name”的私有字段
field.setAccessible(true);//启用和禁用访问安全检查的开关
field.set(a, "oaix"); //设置a对象中"name"属性的值
System.out.println(a.getName());
获取所有字段
AA a = new AA(21, "xiao");
Field[] field = AA.class.getDeclaredFields();
for (Field field2 : field) {
field2.setAccessible(true);
if (field2.getType() == String.class) {//获取字节码类型
field2.set(a, "haha");
System.out.println(a.getName());
} else {
System.out.println(a.getAge());
}
}
四.获取方法
Method中的invoke()方法 注意的是如果目标类中的方法参数是数组的话,记得在invoke()第二参数前加(Object)或者new Object[]{数组};因为在java1.4中invoke()中的第二参数是个数组,虚拟机为了兼容1.4,会对数组进行解析。invoke(aa,(Object)new String[]{"da","asd"});
Class c=BB.class;
Method method=c.getMethod("setName",String.class);//"方法名", 参数字节码(可以为null表示空参数)
Constructor cons=c.getConstructor(int.class,String.class);
BB b=(BB) cons.newInstance(12,"xiao");//创建一个实例对象
method.invoke(b,"haha");
System.out.println(b.getName());
更新:
获取类的接口和父类
public static void printInterfaceNames(Object o) {
Class c = o.getClass();
//获取反射类的接口
Class[] theInterfaces = c.getInterfaces();
for(int i=0; i<theInterfaces.length; i++)
System.out.println(theInterfaces[i].getName());
//获取反射类的父类(超类)
Class theSuperclass = c.getSuperclass();
System.out.println(theSuperclass.getName());
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net