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 + '\'' +
'}';
}
}
使用反射技术完成以下功能:
通过反射创建Person对象
2、获取指定的全参构造器,并创建对象
3、获取所有的属性,并使用反射技术修改具体的值
4、获取所有的方法,并打印
5、使用反射获取toString方法的对象,并执行
public class Task {
public static void main(String[] args) throws Exception {
// 使用反射技术完成以下功能:
// 1、通过反射创建Person对象
Class<?> aClass = Class.forName("homework.day07.Person");
Person o = (Person)aClass.newInstance();
// 2、获取指定的全参构造器,并创建对象
Constructor<?> constructor = aClass.getConstructor(String.class, int.class, String.class);
Person person = (Person)constructor.newInstance("Jack", 15, "女");
// 3、获取所有的属性,并使用反射技术修改具体的值
Field name =aClass.getDeclaredField("name");
name.setAccessible(true);
name.set(person,"Andrew");
Field age=aClass.getDeclaredField("age");
age.setAccessible(true);
age.set(person,20);
Field sex=aClass.getDeclaredField("sex");
sex.setAccessible(true);
sex.set(person,"男");
// 4、获取所有的方法,并打印
Method []methods = aClass.getDeclaredMethods();
for (Method m:methods
) {
System.out.println(m);
}
// 5、使用反射获取toString方法的对象,并执行
Method method=aClass.getMethod("toString");
System.out.println(method.invoke(person));
}
}