package com.itheima;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 定义一个Person类,包含属性name、age。
* 使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式
* 调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
* @author Administrator
*
*/
public class Test {
private static Class clazz;
public static void main(String[] args) {
try {
//使用反射的方式创建一个实例
Class clazz=Class.forName("com.itheima.Person");
Constructor constructor=clazz.getConstructor(String.class,int.class);
//调用构造函数初始化name、age
Person person=(Person) constructor.newInstance("小明",22);
System.out.println(person);
//使用反射方式 调用setName方法对名称进行设置
Method setName=clazz.getDeclaredMethod("setName", String.class);
setName.invoke(person, "小明明");
System.out.println(person);
//不使用setAge方法直接使用反射方式对age赋值
Field field=clazz.getDeclaredField("age");
if (!field.isAccessible()) {
field.setAccessible(true);
}
field.set(person, 222);
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
}
|
|