java反射_改變private中的變量及方法的簡單實例
java反射_改變private中的變量及方法的簡單實例
class DemoTest{
private String name="123";
public getName(){
system.out.println("public getName " + name);
return name;
}
private getName2(){
system.out.println("private getName2 " + name);
return name;
}
}
如這個,要改變name的值。如何改變。通過java反射如何改變
先來看看如何用反射來調(diào)用getName方法
class<DemoTest> calzz=DemoTest.class;
Constructor cons=clazz.getConstructor(new class[]{});//這個是得到class對象的構(gòu)造方法。參數(shù)為構(gòu)造方法的參數(shù)的類的對象。
如:DemoTest有一個構(gòu)造方法為public DemoTest(String arg0,String arg1){......}
這時,Constructor cons=clazz.getConstructor(new class[]{String.class,String.class});兩個String.calss分別對應(yīng)arg0,arg1.
接下來是:
DemoTest test=(DemoTest)cons.newInstance(new Object[]{});//生成相應(yīng)的對象。參數(shù)new Object[]{} 就是構(gòu)造方法對應(yīng)的參數(shù)的具體值。如剛才的:
DemoTest test=(DemoTest)cons.newInstance(new Object[]{“李車”,"張三"});
接下來:
Method method=clazz.getMethod("getName",new Class[]{String.class});
method.invoke(test,new Object[]{"王五"});
這時就可以打印出王五了。
那要如何把name為private 的值進行改變呢。
1。先得到field,
Field field=clazz.getDeclaredField("name");
2.將此對象的 accessible 標志設(shè)置為指示的布爾值。值為 true 則指示反射的對象在使用時應(yīng)該取消 Java 語言訪問檢查。值為 false 則指示反射的對象應(yīng)該實施 Java 語言訪問檢查。
field.setAccessible(true);
3.對變量值進行修改
field.set("name","王五");
OK;
要訪問私有的方法也是一樣。
Method method=clazz.getDeclaredMethod("getName2");
method.setAccessible(true);
method.invoke(test,new Object[]{"王五"});
用getDeclaredFields就能得到private 和public protend protected 的字段
如果用c.getFields();只能得到public類型的屬性
以上這篇java反射_改變private中的變量及方法的簡單實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Spring?Security?捕獲?filter?層面異常返回我們自定義的內(nèi)容
Spring?的異常會轉(zhuǎn)發(fā)到?BasicErrorController?中進行異常寫入,然后才會返回客戶端。所以,我們可以在?BasicErrorController?對?filter異常進行捕獲并處理,下面通過本文給大家介紹Spring?Security?捕獲?filter?層面異常,返回我們自定義的內(nèi)容,感興趣的朋友一起看看吧2022-05-05
Javabean轉(zhuǎn)換成json字符并首字母大寫代碼實例
這篇文章主要介紹了javabean轉(zhuǎn)成json字符并首字母大寫代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
Java如何利用Mybatis進行數(shù)據(jù)權(quán)限控制詳解
這篇文章主要介紹了Java如何利用Mybatis進行數(shù)據(jù)權(quán)限控制詳解,數(shù)據(jù)權(quán)限控制最終的效果是會要求在同一個數(shù)據(jù)請求方法中,根據(jù)不同的權(quán)限返回不同的數(shù)據(jù)集,而且無需并且不能由研發(fā)編碼控制。,需要的朋友可以參考下2019-06-06
Spring @Cacheable自定義緩存過期時間的實現(xiàn)示例
本文主要介紹了Spring @Cacheable自定義緩存過期時間的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Kotlin + Retrofit + RxJava簡單封裝使用詳解
這篇文章主要介紹了Kotlin + Retrofit + RxJava簡單封裝使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07

