国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java反射_改變private中的變量及方法的簡單實例

2019-11-26 14:15:17
字體:
來源:轉載
供稿:網友

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反射如何改變

先來看看如何用反射來調用getName方法

class<DemoTest> calzz=DemoTest.class;Constructor cons=clazz.getConstructor(new class[]{});//這個是得到class對象的構造方法。參數為構造方法的參數的類的對象。

如:DemoTest有一個構造方法為public DemoTest(String arg0,String arg1){......}

這時,Constructor cons=clazz.getConstructor(new class[]{String.class,String.class});兩個String.calss分別對應arg0,arg1.

接下來是:

DemoTest test=(DemoTest)cons.newInstance(new Object[]{});//生成相應的對象。參數new Object[]{} 就是構造方法對應的參數的具體值。如剛才的: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 標志設置為指示的布爾值。值為 true 則指示反射的對象在使用時應該取消 Java 語言訪問檢查。值為 false 則指示反射的對象應該實施 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中的變量及方法的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开原市| 宣威市| 伊吾县| 理塘县| 射洪县| 冷水江市| 龙口市| 昆山市| 西宁市| 棋牌| 新乡县| 青川县| 鞍山市| 辉南县| 怀集县| 蚌埠市| 云霄县| 南涧| 贺兰县| 双江| 宣恩县| 长治县| 恩施市| 庆城县| 宾阳县| 谷城县| 尚义县| 怀柔区| 嘉峪关市| 武胜县| 扎兰屯市| 林州市| 延长县| 鲁甸县| 许昌市| 翁牛特旗| 金寨县| 凤翔县| 汝南县| 建宁县| 葫芦岛市|