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

