一、代码示例
Student类
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package huang6;
public class Student {
private String name;
public int age;
protected String address;
protected Student(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
private Student(String name) {
this.name = name;
}
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;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student() {
}
}
F3类
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package huang6;
import java.lang.reflect.Field;
public class F3 {
public static void main(String[] args) throws Exception {
/*
反射获取成员变量
*/
//1 获取字节码文件对象
Class<?> c = Class.forName("huang6.Student");
//2 获取成员变量的对象
// Field[] fields = c.getFields();
// for (Field field : fields) {
// System.out.println("带Public修饰的成员变量"+field);
// }
//获取所有的成员变量 无论私有的还是共有的
// Field[] declaredFields = c.getDeclaredFields();
// for (Field ss : declaredFields) {
// System.out.println("所有的成员变量" + ss);
// }
// 获取单个的用Public修饰的成员变量
// Field field = c.getField("age");//参数用要获取的成员属性名
// System.out.println("获取Student里的age属性;"+field);
// 获取单个的任意的对象 (无论用什么修饰都能修饰)
Field name = c.getDeclaredField("name");
System.out.println("获取Student的name属性的名字:" + name);
//可以获取成员变量的各种属性
//获取修饰符
int modifiers = name.getModifiers();
System.out.println("权限修饰符为:" + modifiers);//数字表示
// 获取成员属性的名字
String name1 = name.getName();
System.out.println(name1);//name
//获取成员属性的参数类型
Class<?> type = name.getType();
System.out.println(type);//class java.lang.String
//获取成员变量的值 要先有对象
Student stu = new Student();
stu.setName("张三");
//获取成员变量的值
//因为私有的不能访问 所以调用方法临时取消访问权限
name.setAccessible(true);
Object value = name.get(stu);//直接调用方法 传递对象即可
System.out.println("Student里的name的值为:" + value);
//可以修改属性值
name.set(stu, "李四");//把stu对象的值 修改为李四
System.out.println("反射修改后为:" + stu);
}
}
二、运行结果