package day0205;
import java.lang.reflect.*;
public class TestReflection_1 {
//利用反射來繞開封裝
public static void main(String[] args) throws Exception{
Class<?> c = Class.forName("day0205.Student"); //創(chuàng)建類對象
//getConstructor(String.class,int.class) 根據(jù)特定的參數(shù)表 獲取特定的構(gòu)造方法 然后.newInstance()創(chuàng)建構(gòu)造方法對象同時要給特定參數(shù)表
Object o = c.getConstructor(String.class,int.class).newInstance("liucy",20); //調(diào)用無參構(gòu)造方法 創(chuàng)建類的對象
//利用反射技術(shù)繞過封裝訪問私有屬性以及方法
System.out.println("------------------------------------訪問方法");
// Method m1 = c.getMethod("study"); //獲取方法對象
// m1.invoke(o);
Method m2 = c.getDeclaredMethod("study", null); //getDeclaredMethod()能訪問類中的私有屬性/方法
m2.setAccessible(true); //關(guān)鍵代碼 將訪問權(quán)限設(shè)置為true
m2.invoke(o); //這時候私有方法成功被調(diào)用
System.out.println("------------------------------------訪問私有屬性");
//Field f = c.getField("name"); //不能訪問私有屬性
Field f = c.getDeclaredField("name");
f.setAccessible(true); //成功獲取私有屬性
Object s = f.get(o); //獲取類的對象 屬性的值
f.set(o, "cxm"); //給屬性重新賦值
Object s1 = f.get(o); //獲取類的對象 屬性的值
System.out.println(s1);
}
}
class Student{
private String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println(name + age +" 有參構(gòu)造方法被調(diào)用了");
}
private void study() {
System.out.println("study 方法被訪問了");
}
}
利用反射繞過封裝 訪問私有屬性/方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門遣总,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睬罗,“玉大人,你說我怎么就攤上這事旭斥∪荽铮” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵垂券,是天一觀的道長花盐。 經(jīng)常有香客問我,道長菇爪,這世上最難降的妖魔是什么算芯? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮凳宙,結(jié)果婚禮上熙揍,老公的妹妹穿的比我還像新娘。我一直安慰自己近速,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布堪旧。 她就那樣靜靜地躺著削葱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淳梦。 梳的紋絲不亂的頭發(fā)上析砸,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胁塞!你這毒婦竟也來了咏尝?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布置侍,位于F島的核電站,受9級特大地震影響拦焚,放射性物質(zhì)發(fā)生泄漏蜡坊。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一赎败、第九天 我趴在偏房一處隱蔽的房頂上張望秕衙。 院中可真熱鬧,春花似錦僵刮、人聲如沸据忘。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽勇吊。三九已至,卻和暖如春窍仰,著一層夾襖步出監(jiān)牢的瞬間汉规,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 封裝:把屬性和方法私有,僅對外提供訪問方式智润。封裝有幾種類型:類的封裝:將方法和屬性寫進類中就是類的封裝及舍。方法的封裝...
- 1、簡單利用配置文件以及反射生成一個實體類: 配置 文件內(nèi)容: 代碼實現(xiàn): 2窟绷、利用通過javaBean的屬性描述...
- 直接看代碼: 執(zhí)行結(jié)果: 可以看到 私有屬性和方法 也是可以直接訪問 或者 繼承的兼蜈,但是 名字 被改寫了攘残,前面加上...