上面学习了Class类,反射主要是用来获取到类的属性和方法。
几点说明:
- 另外一种获取class的方法: 类名.class
Class clazz = MerchandiseV2.class;
- 通过filed获取实例的属性值:
countField.get(v)
, v代表的是实例化的对象。
MerchandiseV2 v = new MerchandiseV2(1,"床单",100, 50, 30);
Field countField = clazz.getField("count");
System.out.println("通过反射获取一个实例count的值:" + countField.get(v));
-
通过field来修改成员变量的值:
countField.set(v, 150);
v代表是实例化的对象,150代表要传入的值。 -
通过filed获取所有的成员变量:
clazz.getFields()
实例代码如下:
package day14;
import java.lang.reflect.Field;
public class TestReflect {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
MerchandiseV2 v = new MerchandiseV2(1,"床单",100, 50, 30);
// 另一种获取Class类的方法:
Class clazz = MerchandiseV2.class;
// Alt + Enter 解决报错问题
Field countField = clazz.getField("count");
// 通过反射获取一个实例count的值。
System.out.println("通过反射获取一个实例count的值:" + countField.get(v));
// 通过反射设置一个实例的成员变量
countField.set(v, 150);
// 查看设置的成员变量是否发生了变化:
System.out.println(countField.get(v));
System.out.println(v.count);
// class的getFileds方法:获取类的所有的属性。
Field[] fields = clazz.getFields();
System.out.println("输出所有的成员变量:");
for (Field field : fields) {
System.out.println(field);
}
}
}
运行结果:
image.png
附MerchandiseV2的成员变量:
image.png
疑问:
- 感觉不好理解,如果要获取的话,怎么不直接使用get、set方法呢?
- 观察输出结果,发现仅输出了count,count属性是设置成public才可以获取到的,那么私有属性如何获取呢?
网友评论