反射方式獲取成員變數並使用
阿新 • • 發佈:2021-01-20
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); } }