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的值。如何改變。通過java反射如何改變
先來看看如何用反射來調(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.
接下來是:
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[]{“李車”,"張三"});
接下來:
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 語言訪問檢查。值為 false 則指示反射的對(duì)象應(yīng)該實(shí)施 Java 語言訪問檢查。
field.setAccessible(true);
3.對(duì)變量值進(jìn)行修改
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中的變量及方法的簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java:"失效"的private修飾符
- Java中的private修飾符失效了?
- java9開始——接口中可以定義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-Test對(duì)Spring框架進(jìn)行單元測(cè)試
這篇文章主要介紹了如何使用Spring-Test對(duì)Spring框架進(jìn)行單元測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09如何使用@Value和@PropertySource注入外部資源
這篇文章主要介紹了如何使用@Value和@PropertySource注入外部資源的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解
這篇文章主要介紹了JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Spring?Boot實(shí)現(xiàn)web.xml功能示例詳解
這篇文章主要介紹了Spring?Boot實(shí)現(xiàn)web.xml功能,通過本文介紹我們了解到,在Spring Boot應(yīng)用中,我們可以通過注解和編程兩種方式實(shí)現(xiàn)web.xml的功能,包括如何創(chuàng)建及注冊(cè)Servlet、Filter以及Listener等,需要的朋友可以參考下2023-09-09SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot應(yīng)用監(jiān)控帶郵件警報(bào)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02使用SpringSecurity 進(jìn)行自定義Token校驗(yàn)
這篇文章主要介紹了使用SpringSecurity 進(jìn)行自定義Token校驗(yàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java的MyBatis快速入門和實(shí)戰(zhàn)詳解
這篇文章主要介紹了Java的MyBatis快速入門和實(shí)戰(zhàn)詳解,MyBatis是一款優(yōu)秀的持久層框架,用于簡(jiǎn)化JDBC開發(fā),是一套可重用的,通用的,軟件基礎(chǔ)代碼模型,需要的朋友可以參考下2023-05-05