1.反射类Person类
/**
* 反射类Person
* @author wukefan
*
*/
public class Person {
private String name ="吴某某";
public Integer age = 21;
public Person() {
}
public Person(String name,Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void getInfo() {
System.out.println(name+","+age);
}
public void getInfo(String phone) {
System.out.println(name+","+age+",电话:"+phone);
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
2.测试代码:
package reflecttest;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//获取Class对象
Class<Person> person = Person.class;
//获取Person对象的属性
Field[] fields = person.getFields();//获取public属性
for (Field field : fields) {
System.out.println(field.get(new Person()));
}
fields = person.getDeclaredFields();//获取所有属性
for (Field field : fields) {
field.setAccessible(true);//private的需要执行此方法
System.out.println(field.get(new Person()));
}
Field field = person.getDeclaredField("age");
System.out.println(field.get(new Person()));
//获取Person对象的构造方法
Constructor<Person> constructor = person.getConstructor(String.class,Integer.class);//有参构造方法
System.out.println(constructor);
Person test = constructor.newInstance("111",11);//初始化
System.out.println(test.toString());
test = person.newInstance();//无参构造方法
System.out.println(test.toString());
//获取Person对象的普通方法
Method[] methods = person.getMethods();//获取public修饰的普通方法
methods = person.getDeclaredMethods();//获取所有的普通方法
Method method = person.getMethod("getInfo");//获取指定无参方法
method.invoke(new Person());//执行方法
method = person.getMethod("getInfo",String.class);//获取指定有参方法
method.invoke(new Person(),"110");//执行方法
}
}
3.输出如下: