1. 程式人生 > 實用技巧 >反射之------獲得執行時類的指定屬性及其賦值和獲取屬性值的操作

反射之------獲得執行時類的指定屬性及其賦值和獲取屬性值的操作

package com.heima.userJSTL;

import java.lang.reflect.Field;

public class GetFiledTheOne {
    public static void main(String[] args) throws Exception {
 /*       //獲取執行時類的指定屬性並且進行復制和獲取屬性值的操作
        //方法1(此方法只能獲得被public修飾的屬性,所以在實際開發中不太常用)
        Class<Person> aClass = Person.class;
        Field name = aClass.getField("name");//獲得了當前執行時類的例項屬性
        //賦值
        //因為是例項屬性,所以我們需要提前穿件一個物件對這個物件進行該屬性的賦值
        //建立物件
        Person person = aClass.newInstance();
        //對person物件的name屬性進行復制
        name.set(person,"張三");//對person物件的name屬性賦值張三
        Object o = name.get(person);//獲得person物件的name屬性
        System.out.println(o);
*/ //方法2(在開發中我們一般使用方法2) Class<Person> aClass = Person.class; /* Field age = aClass.getDeclaredField("age");//age屬性是被private修飾的 //建立當前執行時類的物件 Person person = aClass.newInstance(); age.setAccessible(true);//暴力反射,設定當前屬性是可以被訪問(賦值和修改)的 //對age進行賦值,但是賦值之前需要進行暴力反射操作 age.set(person, 23); Object o = age.get(person); System.out.println(o);
*/ //獲取類屬性 Field aaa = aClass.getDeclaredField("aaa"); aaa.setAccessible(true);//暴力反射 aaa.set(null,23); Object o1 = aaa.get(null); System.out.println(o1); } }