反射之------獲得執行時類的指定屬性及其賦值和獲取屬性值的操作
阿新 • • 發佈:2020-10-09
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); } }