資源描述:
《孫衛(wèi)琴《Java面向?qū)ο缶幊獭放涮譖PT--java_base10_refl.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、反射JavaReflectionApi的作用檢查運行時的對象動態(tài)更新字段調(diào)用方法反射主要的類:java.lang.Class;java.lang.reflect.Method;java.lang.reflect.Field;java.lang.Constructor檢查運行時的對象1.通過對象的getClass方法,獲得Class對象2.通過Class對象的getMethods()方法獲得所有的方法3.通過Class對象的getFields()方法獲得所有的public字段Personperson=newPerson();ClasspersonClass=person.getClass(
2、);Method[]personMethords=personClass.getMethods();Field[]personFields=personClass.getFields();動態(tài)訪問對象的字段Field提供了1.getXXX(Object)方法,獲得特定對象的某個字段的值2.setXXX(Object,XXX)來設(shè)置特定對象的個字段的值以上XXX表示數(shù)據(jù)類型動態(tài)訪問對象的字段Personperson=newPerson("linda",10);ClasspersonClass=person.getClass();FieldageField=personClass.getFi
3、eld("age");//設(shè)定person的年齡ageField.set(person,newInteger(12));//獲得person的年齡intage=ageField.getInt(person);System.out.print(age);參看reflect.sample.AccessPersonFields類動態(tài)訪問對象的方法Method提供了Objectinvoke(Objectobj,Object[]args)方法,調(diào)用某個特定對象的方法,如果參數(shù)或返回類型為基本類型,將自動轉(zhuǎn)化為相應(yīng)的包裝類對象動態(tài)訪問對象的方法Personperson=newPerson("lind
4、a",10);ClasspersonClass=person.getClass();Class[]parameterClass=newClass[1];parameterClass[0]=Class.forName("int");MethodsetAgeMethod=personClass.getMethod("setAge",parameterClass);parameterClass=newClass[0];MethodgetAgeMethod=personClass.getMethod("getAge",parameterClass);//設(shè)定person的年齡Objectpara
5、ms[]=newObject[1];params[1]=newInteger(12);setAgeMethod.invoke(person,params);//獲得person的年齡ObjectageObject=getAgeMethod.invoke(person,newObject[0]);intage=((Integer)ageObject).intValue();System.out.print(age);參看reflect.smple.AccessPersonMethods類動態(tài)訪問構(gòu)造方法Constructorc=Person.class.getDeclaredConstru
6、ctor(newClass[]{String.class,int.class});Personp=(Person)c.newInstance(newObject[]{"linda",newInteger(10)});System.out.println(p);參看reflect.smple.ConstructPerson類動態(tài)代理動態(tài)代理是指客戶通過代理類來調(diào)用其它對象的方法動態(tài)代理使用場合:調(diào)試遠(yuǎn)程方法調(diào)用動態(tài)代理客戶代理對象接口代理接口動態(tài)代理步奏1.創(chuàng)建一個實現(xiàn)接口InvocationHandler的類,它必須實現(xiàn)invoke方法publicObjectinvoke(Objectt
7、heProxy,Methodmethod,Object[]params)throwsThrowable{try{Objectretval=method.invoke(targetObj,params);//PrintouttheresultSystem.out.println(retval);returnretval;}catch(Exceptionexc){}}參見DebugProxy.java動態(tài)代理步奏2.創(chuàng)建被代理的類以及接