【郑州校区】反射操作公共成员变量
1.1.1 反射public成员变量(字段)通过反射运行public变量流程 1. 通过反射获取该类的字节码对象 Class clazz = Class.forName("com.heima.Person"); 2. 创建该类对象 Object p = clazz.newInstance(); 3. 获取该类中需要操作的字段(成员变量) getField(String name) --> 方法传入字段的名称. 注意: 此方法只能获取公共的字段 Field f = clazz.getField("age"); 4. 通过字段对象中的方法修改属性值 void set(Object obj, Object value) --> 参数1): 要修改那个对象中的字段, 参数2): 将字段修改为什么值. f.set(p, 23); 1.1.2 案例代码[AppleScript] 纯文本查看 复制代码 package com.itheima_01;
import java.lang.reflect.Field;
/*
* 通过反射获取成员变量并使用
* Field[] getFields()
* Field getField(String name)
*
* Field[] getDeclaredFields()
* Field getDeclaredField(String name)
*
* Field:
* Object get(Object obj)
* void set(Object obj, Object value)
*/
public class ReflectDemo3 {
public static void main(String[] args) throws ReflectiveOperationException {
//获取学生类的字节码对象
Class clazz = Class.forName("com.itheima_01.Student");
//获取学生类的对象
Object stu = clazz.newInstance();
//Field getField(String name) :根据字段名称获取公共的字段对象
Field f = clazz.getField("age");//获取成员变量对象
//System.out.println(f);
//void set(Object obj, Object value)
f.set(stu,28);//通过成员变量对象,修改指定对为指定的值
//Object get(Object obj)
Object age = f.get(stu);//通过对象获取成员变量的值
System.out.println(age);
System.out.println(stu);
}
private static void method(Class clazz) {
//Field[] getFields() :获取公共的成员变量
Field[] fs = clazz.getFields();
for (int i = 0; i < fs.length; i++) {
System.out.println(fs);
}
System.out.println("----------");
//getDeclaredFields() :获取所有的成员变量
Field[] fs2 = clazz.getDeclaredFields();
for (int i = 0; i < fs2.length; i++) {
System.out.println(fs2);
}
}
} 1.1.3 方法总结 通过反射获取成员变量并使用
Field[] getFields() --> 返回该类所有(公共)的字段
Field getField(String name) --> 返回指定名称字段
Field[] getDeclaredFields() --> 暴力反射获取所有字段(包括私有)
Field getDeclaredField(String name) --> 暴力反射获取指定名称字段
---------------马上讲-----------------
Field:
Object get(Object obj) --> Field对象调用, 返回传入对象的具体字段
void set(Object obj, Object value) --> Field对象调用
参数1: 要修改的对象
参数2: 将此对象的字段修改为什么值. 传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
|