标题: 关于反射 [打印本页] 作者: 董将 时间: 2012-12-20 14:53 标题: 关于反射 首先创建一个Person类,在其中创建三个不同类型的属性变量
public class Person {
private int age;
String name;
public String address;
@Override
public String toString() {
return name + ":" + age + ":" + address;
}
}
在这里首先是要获取到Person对象的字节码文件,获取的方式有以下几种:
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
// 第一种方式
Person p = new Person();
Class c = p.getClass();
// System.out.println(c);
Person p2 = new Person();
Class c2 = p2.getClass();
System.out.println(p == p2);// false
System.out.println(c == c2);// true
// 第二种方式
Class c3 = Person.class;
System.out.println(c == c3);
// 第三种方式 类要写全路径名称
Class c4 = Class.forName("cn.itcast.reflect.Person");
System.out.println(c == c4);
}
}
接下来就是要获取到Person类中的构造方法
public class ReflectDemo2 {
public static void main(String[] args) throws Exception {
// 获取字节码文件对象
Class c = Class.forName("cn.itcast.reflect.Person");
// 获取构造方法
// Constructor[] cons = c.getConstructors();
Constructor[] cons = c.getDeclaredConstructors();
for (Constructor con : cons) {
System.out.println(con);
}
/*
* Person p = new Person(); sop(p);
*/
System.out.println("*******************************");
// 通过Class的newInstance方法创建对象
Object obj = c.newInstance(); // 默认调用的是无参构造方法
System.out.println(obj);
System.out.println("*******************************");
// 获取单个构造方法
//Constructor<T> getConstructor(Class<?>... parameterTypes)
//Class数组其实就是参数的Class类型数组
//获取的是无参构造方法
Constructor c1 = c.getConstructor();
//如果通过c1创建对象
//T newInstance(Object... initargs)
//Object...数组其实就是参数的Object类型数组
/*
* Person p = new Person();
* Person p = new Person("张三",20);
*/
Object obj1 = c1.newInstance();
System.out.println(obj1);
}
}
接下来就是创建对象了,创建对象的方法
public class ReflectDemo3 {
public static void main(String[] args) throws Exception {
Class c = Class.forName("cn.itcast.reflect.Person");