1. 程式人生 > >java反射(獲取私有成員,還有公有成員變數)

java反射(獲取私有成員,還有公有成員變數)

不推薦(破壞了類的封裝)

下面用到的物件Class A ,Constructor con,Field field 

1.獲取私有方法

Constructor[] cons = A.getDeclaredConstructors();//獲取所有的構造方法返回一個數組 還有getDeclaredConstruct(Class<T> class...)用於獲取特定的構造方法
con.newInstance(Object...);//若許可權是private是不能直接執行的

Constructor的父類AccessibleObject中的setAccessible(boolean)方法用來選擇是否要檢查許可權

con.setAccessible(true);//確認不用檢查許可權,所以上面一句就能執行

2.獲取成員變數

Field[] fields = A.getFields();//獲得A類的所有公有成員變數,返回值為Field[](沒加s的話返回值為Field(成員類的String物件名))  
getDeclaredFields();//與其類似 同時破除許可權檢查的方法field.setAccessible(true);
field.set(obj,value);//兩個引數都是Object類 obj是field的依附例項類物件(有物件才有的成員,不然哪裡來的這個成員),value則是想改變的值