java.lang.Object | +----java.lang.reflect.Method
Method 提供相关信息和访问、类或接口的单个方法。该镜像方法可以是一个类方法或一个实例方法 (包含抽象方法在内) 。
当用基本方法的形参匹配实参时允许构造子进行扩展转换,但若发生缩减转换时,则抛出 IllegalArgumentException 。
public Class getDeclaringClass()
public String getName()
public native int getModifiers()
public Class getReturnType()
public Class[] getParameterTypes()
public Class[] getExceptionTypes()
public boolean equals(Object obj)
public int hashCode()
public String toString()
public boolean java.lang.Object.equals(java.lang.Object)
访问修饰词以“Java 语言规范”指定的典型顺序放置。首先是 public、protected 或 private , 然后将其它修饰词按下列次序放置: static、final、synchronized、native 。
public native Object invoke(Object obj,
Object args[]) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
方法调用依次按下列步骤进行:
若基本方法是静态的,则忽略指定对象的参数。它可以为 null 。
否则, 该方法是一个实例方法。若指定对象参数为 null , 则调用抛出 NullPointerException 。否则, 若指定对象参数不是类的实例或说明基本方法的接口,则调用抛出 IllegalArgumentException 。
若该 Method 对象使 Java 语言存取控制和基本方法不可存取,则该调用抛出 IllegalAccessException 。
若 args 提供的实参与基本方法必需的形参不同,则该调用抛出 IllegalArgumentException 。
对于提供的 args 数组中的每个实参:
若相应形参有一个原始类型,则试进行解包转换将对象值转换为原始类型值。若尝试失败,则该调用抛出 IllegalArgumentException 。
进行可能的解包之后,若标志或扩展转换不能将参数值转换为相应形参,则该调用抛出 IllegalArgumentException 。
若基本方法是一个实例方法, 则用动态方法查寻来调用,如同在 Java 语言规范中 15.11.4.4 章节所描述的;特别是将要发生基于目标对象的运行时间类型的覆盖。
若基本方法是静态的,则将其作为说明类上的确切方法调用。
将控制转移到基本方法。若方法以抛出异常而突然结束,则将异常放置在 InvocationTargetException 中,并依次抛给调用方。
若方法正常完成,则将返回值返回给调用方;若该值有一个原始类型,则首先将其恰当地打包于某对象中。若基本方法返回类型为 void, 则调用返回 null 。