使用反射技术完成以下功能:
1、通过反射创建Person对象
2、获取指定的全参构造器,并创建对象
3、获取所有的属性,并使用反射技术修改具体的值
4、获取所有的方法,并打印
5、使用反射获取toString方法的对象,并执行
public class Person {
private String name ;
private int age ;
private String sex ;
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
public static void main(String[] args) throws Exception {
// 1、通过反射创建Person对象
Class<Person> personClass = Person.class;
Person person1 = personClass.newInstance();
Class<Person> aClass = (Class<Person>) Class.forName("com.qiku.homework_1_30.Person");
Person person2 = aClass.newInstance();
//2、获取指定的全参构造器,并创建对象
Constructor<Person> constructor = aClass.getConstructor(String.class, int.class, String.class);
Person person3 = constructor.newInstance("tom", 20, "man");
System.out.println(person3);
// 3、获取所有的属性,并使用反射技术修改具体的值
Field[] fields = aClass.getDeclaredFields();
System.out.println(Arrays.toString(fields));
Field field = aClass.getDeclaredField("age");
field.setAccessible(true); // 暴力访问
field.set(person3 , 30);
System.out.println(person3);
// 4、获取所有的方法,并打印
Method[] methods = personClass.getMethods();
System.out.println("所有的方法:");
for (Method method : methods){
System.out.println(method);
}
// 5、使用反射获取toString方法的对象,并执行
Method method = personClass.getMethod("toString");
System.out.println(method.invoke(person3));
}