java反射:再谈JAVA中的反射机制来源: 发布时间:星期四, 2009年2月12日 浏览:105次 评论:0
JAVA反射机制是在运行状态中对于任意个类都能够知道这个类所有属性和思路方法;对于任意个对象都能够它任意个思路方法;这种动态获取信息以及动态对象思路方法功能称为java语言反射机制 Java反射机制主要提供了以下功能:在运行时判断任意个对象所属类;在运行时构造任意个类对象;在运行时判断任意个类所具有成员变量和思路方法;在运行时任意个对象思路方法;生成动态代理 1.得到某个对象属性 1publicObjectgetProperty(Objectowner,StringfieldName)throwsException{ 2ClassownerClass=owner.getClass; 3 4Fieldfield=ownerClass.getField(fieldName); 5 6Objectproperty=field.get(owner); 7 8property; 9} ClassownerClass=owner.getClass:得到该对象Class Fieldfield=ownerClass.getField(fieldName):通过Class得到类声明属性 Objectproperty=field.get(owner):通过对象得到该属性例子如果这个属性是非公有这里会报IllegalAccessException 2.得到某个类静态属性 1publicObjectgetStaticProperty(StringName,StringfieldName) 2throwsException{ 3ClassownerClass=Class.forName(Name); 4 5Fieldfield=ownerClass.getField(fieldName); 6 7Objectproperty=field.get(ownerClass); 8 9property; 10} ClassownerClass=Class.forName(Name):首先得到这个类Class Fieldfield=ownerClass.getField(fieldName):和上面样通过Class得到类声明属性 Objectproperty=field.get(ownerClass):这里和上面有些区别该属性是静态所以直接从类Class里取 3.执行某对象思路方法 1publicObjectinvokeMethod(Objectowner,StringmethodName,Objectargs)throwsException{ 2 3ClassownerClass=owner.getClass; [Page] 4 5ClassargsClass=Class[args.length]; 6 7for(i=0,j=args.length;i<j;i){ 8argsClass[i]=args[i].getClass; 9} 10 11Methodmethod=ownerClass.getMethod(methodName,argsClass); 12 13method.invoke(owner,args); 14} Classowner_=owner.getClass:首先还是必须得到这个对象Class 5~9行:配置参数Class作为寻找Method条件 Methodmethod=ownerClass.getMethod(methodName,argsClass):通过Method名和参数Class得到要执行Method method.invoke(owner,args):执行该Methodinvoke思路方法参数是执行这个思路方法对象和参数返回值是Object也既是该思路方法返回值 4.执行某个类静态思路方法 1publicObjectinvokeStaticMethod(StringName,StringmethodName, 2Objectargs)throwsException{ 3ClassownerClass=Class.forName(Name); 4 5ClassargsClass=Class[args.length]; 6 7for(i=0,j=args.length;i<j;i){ 8argsClass[i]=args[i].getClass; 9} 10 11Methodmethod=ownerClass.getMethod(methodName,argsClass); 12 13method.invoke(null,args); 14} 基本原理和例子3相同区别点是最后行invoke个参数是null这是静态思路方法不需要借助例子运行 5.新建例子 1 2publicObjectInstance(StringName,Objectargs)throwsException{ [Page] 3ClassoneClass=Class.forName(Name); 4 5ClassargsClass=Class[args.length]; 6 7for(i=0,j=args.length;i<j;i){ 8argsClass[i]=args[i].getClass; 9} 10 11Constructorcons=oneClass.getConstructor(argsClass); 12 13cons.Instance(args); 14 15} 这里说思路方法是执行带参数构造来新建例子思路方法如果不需要参数可以直接使用oneClass.Instance来实现 ClassoneClass=Class.forName(Name):第步得到要构造例子Class 第5~第9行:得到参数Class Constructorcons=oneClass.getConstructor(argsClass):得到构造子 cons.Instance(args):新建例子 6.判断是否为某个类例子 1publicbooleanisInstance(Objectobj,Classcls){ 2cls.isInstance(obj); 3} 7.得到中某个元素 1publicObjectgetByArray(Object.gif' />,index){ 2Array.get(.gif' />,index); 3} 0
相关文章读者评论发表评论 |