package com.shujia.day21;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/*
反射获取成员变量并赋值使用
获取所有成员 通过类的字节码文件对象获取
getFields 只能获取公共的成员变量
getDeclaredFields 获取私有的成员变量
获取单个成员
getField,getDeclaredField 同上
修改成员的值 修改私有的需要暴力访问f2.setAccessible(true);
set(Object obj,Object value) 通过获取的成员变量修改,需要指定是哪个类的
将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
*/
public class FieldDemo1 {
public static void main(String[] args) throws Exception {
//先通过反射将对象创建出来
//创建类的字节码文件对象
Class<?> studentClass = Class.forName("com.shujia.day21.Student");
//通过类的字节码文件对象获取类的构造方法
Constructor<?> c1 = studentClass.getConstructor();
//通过获取的构造方法创建类的对象,创建这个对象的目的是访问成员的,被访问的成员变量是一个独立的个体,使用时需要指定哪一个类
Object o = c1.newInstance();
//反射获取成员变量
//getField 只能获取公共的成员变量
Field f1 = studentClass.getField("phoneNum");
System.out.println(f1);
// Field f2 = studentClass.getField("name");
// System.out.println(f2);
//获取私有的成员变量
Field f2 = studentClass.getDeclaredField("name");
System.out.println(f2);
//如何使用反射获取的成员变量呢?
f1.setInt(o,110);
System.out.println("------------------------------------------");
System.out.println(o);
System.out.println("------------------------------------------");
f2.setAccessible(true);
f2.set(o,"魏一民");
System.out.println(o);
}
}
标签:f2,变量,成员,System,获取,println,赋值
From: https://www.cnblogs.com/qiwei-bigdata/p/18377119