通過反射 修改訪問和修改屬性的值 Day25


package com.sxt.field;
/*
 * 通過反射拿到屬性值
 *       修改public屬性值 
 *       修改private屬性值
 * 缺點:可讀性差;代碼復雜
 * 優點:靈活;可以訪問修改private屬性值
 * 以后多運用setXxx getXxx 修改屬性的值
 */
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class TestField {
    public static void main(String[] args) throws Exception {
        //設置私有屬性值
        Class<?> class1 = Class.forName("com.sxt.entity.Student");
        //創建對象
        Object obj = class1.newInstance();
        Field[] fields = class1.getDeclaredFields();
        //遍歷所有屬性
        for(Field f : fields){
            System.out.println(f.getName()+"\t"+Modifier.toString(f.getModifiers()));
        }
        System.out.println("----------------------------------");
        
        //修改public的score的屬性值
        Field field1 = class1.getDeclaredField("score");
        //直接通過方法(基本數據類型)
        field1.setDouble(obj, 99.9);
        double d = field1.getDouble(obj);
        System.out.println(d);
        
        System.out.println("----------------------------------");
        
        //拿到private的name的屬性值
        Field field2 = class1.getDeclaredField("name");
        System.out.println(field2.getName() +" "+ Modifier.toString(field2.getModifiers()));
        //可以改變私有屬性值
        field2.setAccessible(true);
        field2.set(obj, "小明");
        Object object = field2.get(obj);
        System.out.println(object);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM