反射方式获取成员变量并使用
Field对象

域(属性,成员变量)对象,属于java.base模块,java.lang.reflect包中
通过Class对象获取属性
getField(String name) //返回一个Field对象,仅公共属性
getDeclaredField(String name) //返回一个Field对象,可获取私有属性
getDeclaredFields() //返回此类所有(含私有)属性的数组
Field的常用方法
void set(Object obj,Object value) //设置obj对象的指定属性值为vlaue
void setAccessible(boolean flag) //设置此属性的可访问性设置为指定布尔值
Student.java
package Demo01;
import java.lang.reflect.Constructor;
/**
* @author :K;
*/
public class Student {
public String name;
private int age;
public Student() {
}
public Student(String name){
System.out.println("输入的姓名为:"+name);
}
private Student(int age){
System.out.println("你的年龄为:"+age);
}
public void show(){
System.out.println("我是公共的无参方法");
}
public void show2(int a){
System.out.println("我是公共的代参方法,你传入的参数为:"+a);
}
private int show3(int a,int b){
System.out.println("我是私有的代参方法");
return a+b;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Reflect_GetField.java
package Demo01;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class Reflect_GetField {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class aClass = Class.forName("Demo01.Student");
Constructor constructor = aClass.getConstructor();
Student stu = (Student)constructor.newInstance();
//Student stu =(Student)aClass.getConstructor().newInstance(); 链式编程
Field name = aClass.getField("name");
name.set(stu,"小白白");
Field age = aClass.getDeclaredField("age");
age.setAccessible(true);
age.set(stu,20);
System.out.println(stu);
}
}
浙公网安备 33010602011771号