欢迎来到天天文库
浏览记录
ID:51588162
大小:76.50 KB
页数:13页
时间:2020-03-24
《孙卫琴《Java面向对象编程》配套PPT--java_base10_refl.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、反射JavaReflectionApi的作用检查运行时的对象动态更新字段调用方法反射主要的类: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();动态访问对象的字段Field提供了1.getXXX(Object)方法,获得特定对象的某个字段的值2.setXXX(Object,XXX)来设置特定对象的个字段的值以上XXX表示数据类型动态访问对象的字段Personperson=newPerson("linda",10);ClasspersonClass=person.getClass();FieldageField=personClass.getFi
3、eld("age");//设定person的年龄ageField.set(person,newInteger(12));//获得person的年龄intage=ageField.getInt(person);System.out.print(age);参看reflect.sample.AccessPersonFields类动态访问对象的方法Method提供了Objectinvoke(Objectobj,Object[]args)方法,调用某个特定对象的方法,如果参数或返回类型为基本类型,将自动转化为相应的包装类对象动态访问对象的方法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);//设定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类动态访问构造方法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类动态代理动态代理是指客户通过代理类来调用其它对象的方法动态代理使用场合:调试远程方法调用动态代理客户代理对象接口代理接口动态代理步奏1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法publicObjectinvoke(Objectt
7、heProxy,Methodmethod,Object[]params)throwsThrowable{try{Objectretval=method.invoke(targetObj,params);//PrintouttheresultSystem.out.println(retval);returnretval;}catch(Exceptionexc){}}参见DebugProxy.java动态代理步奏2.创建被代理的类以及接
此文档下载收益归作者所有