- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java反射调用某个类的方法〔带参数和不带参数〕
Class类:
public?getDeclaredMethod(?name,???????????????????????????????????...?parameterTypes)???????????????????????????throws?,??????????????????????????????????
返回一个?Method对象,该对象反映此?Class对象所表示的类或接口的指定已声明方法。name参数是一个?String,它指定所需方法的简称,parameterTypes参数是?Class对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是?init”?或?“clinit,则引发一个?NoSuchMethodException。?
参数:
name-?方法名?
parameterTypes-?参数数组?
返回:
该类与指定名和参数相匹配的方法的?Method对象?
抛出:
-?如果找不到匹配的方法。?
-?如果?name为?null
-?如果存在安全管理器?s,并满足下列任一条件:?
调用?拒绝访问已声明方法?
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对?的调用拒绝访问该类的包?
从以下版本开始:
JDK1.1?
?
?
Method类:
?
public?invoke(?obj,???????????????????????...?args)????????????????throws?,???????????????????????,???????????????????????
对带有指定参数的指定对象调用由此?Method对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。?
如果底层方法是静态的,那么可以忽略指定的?obj参数。该参数可以为?null。?
如果底层方法所需的形参数为?0,则所提供的?args数组长度可以为?0?或?null。?
如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在?Java?Language?Specification,?Second?Edition?的第?15.12.4.4?节中;在发生基于目标对象的运行时类型的重写时更应该这样做。?
如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。?
如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为?void,则该调用返回?null。?
参数:
obj-?从中调用底层方法的对象?
args-?用于方法调用的参数?
返回:
使用参数?args在?obj上指派该对象所表示方法的结果?
抛出:
-?如果此?Method对象强制执行?Java?语言访问控制,并且底层方法是不可访问的。?
-?如果该方法是实例方法,且指定对象参数不是声明底层方法的类或接口(或其中的子类或实现程序)的实例;如果实参和形参的数量不相同;如果基本参数的解包转换失败;如果在解包后,无法通过方法调用转换将参数值转换为相应的形参类型。?
-?如果底层方法抛出异常。?
-?如果指定对象为?null,且该方法是一个实例方法。?
-?如果由此方法引起的初始化失败。
?
这个动态调用类的方法非常好用,可以根据字符串动态调用某个类的方法,灵活性大,但记住反射是比较耗效率,要保留的用。可以这么用,通过一个文本来解析,动态实现某个类的计算方法,通过一个文本就可以方便的调用方法的机制。比较灵活。
?
?
下面是代码,已经封装好了:
?
/*?*?To?change?this?template,?choose?Tools?|?Templates?*?and?open?the?template?in?the?editor.?*/package?com.jijing.method;
import?java.lang.reflect.InvocationTargetException;import?java.lang.reflect.Method;import?java.util.logging.Level;import?java.util.logging.Logger;
/**?*?*?@author?Administrator?*?用来通过类名反射当前类的某个方法,包括带参数的方法,当然只可以是public的方法?*/public?cla
文档评论(0)