1,反射的Field方法改变对象的值
定位对象位置
Class aClass = Class.forName("com.dyh.StudentDemo");
获取构造方法
Constructor constructor = aClass.getConstructor(String.class, int.class);
设定对象属性
StudentDemo student = (StudentDemo) constructor.newInstance("张三", 23);
System.out.println(student);
field方法获取其成员变量
Field[] fields = aClass.getDeclaredFields();
展示其成员变量
for (Field field1 : fields) {
System.out.println(field1);
}
改变对象的姓名属性
Field fieldName=aClass.getDeclaredField("name");
私有变量要拒绝访问才能改变
fieldName.setAccessible(true);
将名字改成李四
fieldName.set(student,"李四");
System.out.println(student);
Field fieldAge=aClass.getDeclaredField("age");
fieldAge.setAccessible(true);
fieldAge.set(student,12);
System.out.println(student);
代码运行结果如下
StudentDemo{name='张三', age=23}
private java.lang.String com.dyh.StudentDemo.name
private int com.dyh.StudentDemo.age
StudentDemo{name='李四', age=23}
StudentDemo{name='李四', age=12}
可以看到展示成员变量时,展示了其两个私有变量name与age
2,Method类调用对象方法(带参带返回值)
先展示对象方法
public String animal(int birth) {
if (birth % 12 == 0) {
return "属猴";
}
return "不属猴";
}
若输入的生日年份是12的倍数,就返回属猴
调用的代码如下
调用animal方法,参数为int类型
Method method=aClass.getMethod("animal", int.class);
返回值用Object接收,参数的值为2004,若无参数则{ }为空,前提是方法就是无参方法
Object o=method.invoke(student,new Object[]{2004});
System.out.println(o);