文档详情

Java反射调用某个类方法(带参数和不带参数).doc

发布:2017-07-07约1.54万字共7页下载文档
文本预览下载声明
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?的第??节中;在发生基于目标对象的运行时类型的重写时更应该这样做。? 如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。? 如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为?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?class?Class
显示全部
相似文档