答:分析
1、建立Person Bean 并且复写toString() 方法
2、通过反射Person 构造方法为属性name age 赋值
3、通过反射Person Method中的setName的方法为name 赋值
4、通过反射Person Field 中age 为age
package com.itheima;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 定义一个标准的JavaBean,名叫Person,包含属性name、age。
* 使用反射的方式创建一个实例、调用构造函数初始化name、age,
* 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
*
* 分析:
* 1、建立Person Bean 并且复写toString() 方法
* 2、通过反射Person 构造方法为 属性name age 赋值
* 3、通过反射Person Method中的setName的方法为name 赋值
* 4、通过反射Person Field 中age 为age 赋值
* @author dell
*
*/
public class Test7 {
public static void main(String[] args) {
Test7 test = new Test7();
test.setName();
test.setAge();
}
public Test7() {
try {
// 加载类
@SuppressWarnings("unchecked")
Class<Person> pclazz = (Class<Person>) Class.forName("com.itheima.Person");
// 加载构造方法
Constructor<Person> constructor = pclazz.getConstructor(String.class, int.class);
Person person = (Person) constructor.newInstance("黑马", 21);
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 使用反射方式调用setName方法对名称进行设置
*/
public void setName() {
try {
// 加载类
@SuppressWarnings("unchecked")
Class<Person> pclazz = (Class<Person>) Class.forName("com.itheima.Person");
// 加载构造方法
Constructor<Person> constructor = pclazz.getConstructor();
//构成出一个person 对象
Person person = (Person) constructor.newInstance(null);
//得到setName 方法
Method method = pclazz.getMethod("setName", String.class);
//设置姓名值
method.invoke(person, "黑马");
//打印出person值
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 不使用setAge方法直接使用反射方式对age赋值
*/
public void setAge() {
try {
// 加载类
@SuppressWarnings("unchecked")
Class<Person> clazz = (Class<Person>) Class.forName("com.itheima.Person");
// 加载构造方法
Constructor<Person> constructor = clazz.getConstructor();
Person person = (Person) constructor.newInstance(null);
// 得到想操作的字段
Field a = clazz.getDeclaredField("age");
// 允许反射私有方法。。
a.setAccessible(true);
// 获取字段类型。。
Class type = a.getType();
if (type.equals(int.class)) {
// 设置年龄值
a.set(person, 21);
}
//打印出person值
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.itheima;
public class Person {
private String name;
private int age;
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 Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person: Name:\t" + name + "\t Age:\t" + age;
}
}