




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Class类:publicgetDeclaredMethod(name,.parameterTypes)throws,返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法。name参数是一个String,它指定所需方法的简称,parameterTypes参数是Class对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是”或“,则引发一个NoSuchMethodException。 参数:name-方法名parameterTypes-参数数组返回:该类与指定名和参数相匹配的方法的Method对象抛出:-如果找不到匹配的方法。-如果name为null-如果存在安全管理器s,并满足下列任一条件: 调用拒绝访问已声明方法 调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对的调用拒绝访问该类的包从以下版本开始:JDK1.1Method类:publicinvoke(obj,.args)throws,对带有指定参数的指定对象调用由此Method对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。 如果底层方法是静态的,那么可以忽略指定的obj参数。该参数可以为null。如果底层方法所需的形参数为0,则所提供的args数组长度可以为0或null。如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在JavaLanguageSpecification,SecondEdition的第节中;在发生基于目标对象的运行时类型的重写时更应该这样做。如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为void,则该调用返回null。参数:obj-从中调用底层方法的对象args-用于方法调用的参数返回:使用参数args在obj上指派该对象所表示方法的结果抛出:-如果此Method对象强制执行Java语言访问控制,并且底层方法是不可访问的。-如果该方法是实例方法,且指定对象参数不是声明底层方法的类或接口(或其中的子类或实现程序)的实例;如果实参和形参的数量不相同;如果基本参数的解包转换失败;如果在解包后,无法通过方法调用转换将参数值转换为相应的形参类型。-如果底层方法抛出异常。-如果指定对象为null,且该方法是一个实例方法。-如果由此方法引起的初始化失败。这个动态调用类的方法非常好用,可以根据字符串动态调用某个类的方法,灵活性大,但记住反射是比较耗效率,要保留的用。可以这么用,通过一个文本来解析,动态实现某个类的计算方法,通过一个文本就可以方便的调用方法的机制。比较灵活。下面是代码,已经封装好了:/*Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagecom.jijing.method;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.logging.Level;importjava.util.logging.Logger;/*authorAdministrator*用来通过类名反射当前类的某个方法,包括带参数的方法,当然只可以是public的方法*/publicclassClassMethod/*paramargsthecommandlinearguments*/publicstaticvoidmain(Stringargs)/TODOcodeapplicationlogichereMyMethodm=newMyMethod();getMethod(show,m,null);/这个方法可以根据一个字符串来动态创建某个类的相应方法,这个思路非常好。getMethod(show,m,newObject20);/包括自定义类getMethod(show,m,newObject100,今天天气不错,newNewClass();/*paramclassName类的路劲*return返回Class的类信息*/publicstaticClassgetclass(StringclassName)Classc=null;tryc=Class.forName(className);catch(ClassNotFoundExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);returnc;/*paramMethodName*paramo调用此方法的对象*paramparas调用的这个方法的参数参数列表*/publicstaticvoidgetMethod(StringMethodName,Objecto,Objectparas)Classc=null;if(paras!=null)/存在intlen=paras.length;c=newClasslen;for(inti=0;ilen;+i)ci=parasi.getClass();tryMethodmethod=o.getClass().getDeclaredMethod(MethodName,c);trymethod.invoke(o,paras);/调用o对象的方法catch(IllegalAccessExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(IllegalArgumentExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(InvocationTargetExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(NoSuchMethodExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(SecurityExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);/*authorAdministrator*反射这个类的某个方法*/classMyMethodpublicMyMethod()/*/publicvoidshow()System.out.println(我是MyMethod);/*paramtemp带参数的的*/publicvoidshow(Integertemp)System.out.println(*=+Value();publicvoidshow(Integera,Stringname,NewClassnc)System.out.println(Integer=+a+name=+name+NewClass=+nc);classNewClasspublicvoidprint()System.out.println(我是NewClass();OverridepublicStringtoString()return我是NewClass;上面封装的方法是:/*paramMethodName*paramo调用此方法的对象*paramparas调用的这个方法的参数参数列表*/publicstaticvoidgetMethod(StringMethodName,Objecto,Objectparas)Classc=null;if(paras!=null)/存在intlen=paras.length;c=newClasslen;for(inti=0;ilen;+i)/这里不是java内置类基本数据是不支持的,请一步一步完成,可以参考我的上篇文章ci=parasi.getClass();tryMethodmethod=o.getClass().getDeclaredMethod(MethodName,c);trymethod.invoke(o,paras);/调用o对象的方法catch(IllegalAccessExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(IllegalArgumentExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(InvocationTargetExceptionex)Logger.getLogger(ClassMethod.class.getName().log(Level.SEVERE,null,ex);catch(NoSuchMethodExceptionex)Logger.getLog
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省广元市川师大万达中学2025-2026学年高二上学期第一次月考(8月)历史试题(含答案)
- 2025年中国蕃茄牛肉米线数据监测报告
- 课件时长的确定
- 锅炉(承压)设备焊工基础考核试卷及答案
- 铁合金回转窑工质量管控考核试卷及答案
- 巧克力塑形师工艺创新考核试卷及答案
- 课件无广告原因
- 拜耳法溶出工成本预算考核试卷及答案
- 2025年中国猪皮二层箱包革数据监测报告
- 金属牙齿考试题及答案
- 二年级语文上册《有趣的动物》课件PPT
- 不干胶贴标机设计学士学位论文
- 《劳动合同书》-河南省人力资源和社会保障厅劳动关系处监制(2016.11.15)
- 钢轨检测报告
- 战略管理:概念与案例
- GB/T 3505-2009产品几何技术规范(GPS)表面结构轮廓法术语、定义及表面结构参数
- GB/T 11186.1-1989涂膜颜色的测量方法第一部分:原理
- 09S304 卫生设备安装图集
- 功能材料概论-课件
- 微纳加工课件
- 危重病人紧急气道管理课件
评论
0/150
提交评论