getMethod
publicMethodgetMethod(Stringname,Class>... parameterTypes)
throwsNoSuchMethodException,SecurityException
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。
如果 name 是 ";" 或 "",则将引发 NoSuchMethodException。否则,要反映的方法由下面的算法确定(设 C 为此对象所表示的类):
在 C 中搜索任一匹配的方法。如果找不到匹配的方法,则将在 C 的超类上递归调用第 1 步算法。
如果在第 1 步中没有找到任何方法,则在 C 的超接口中搜索匹配的方法。如果找到了这样的方法,则反映该方法。
在 C 类中查找匹配的方法:如果 C 正好声明了一个具有指定名称的公共方法并且恰恰有相同的形参类型,则它就是反映的方法。如果在 C 中找到了多个这样的方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则反映该方法;否则将从中任选一个方法。
注意,类中可以有多个匹配方法,因为尽管 Java 语言禁止类声明带有相同签名但不同返回类型的多个方法,但 Java 虚拟机并不禁止。这增加了虚拟机的灵活性,可以用来实现各种语言特性。例如,可以使用桥方法 (brige method)实现协
getName
public String getName()
以
String 形式返回此
Method 对象表示的方法名称。
返回:
底层成员的简单名称
变返回;桥方法以及将被重写的方法将具有相同的签名,不同的返回类型。
getModifiers
public int getModifiers()
以整数形式返回此 Method 对象所表示方法的 Java 语言修饰符。应该使用 Modifier 类对修饰符进行解码。
返回:
底层成员的 Java 语言修饰符
另请参见:
具体实例如下:
GetMethodDemo02
package org.lxh.demo.classdemo04;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class GetMethodDemo02 {
public static void main(String[] args) throws Exception {
Class> c = Class.forName("org.lxh.demo.classdemo04.Person");
Method m[] = c.getMethods(); // 取得全部的方法 for (int i = 0; i < m.length; i++) {
String mod = Modifier.toString(m[i].getModifiers()); // 取得访问权限
String metName = m[i].getName(); // 取得方法名称
Class> ret = m[i].getReturnType();// 取得返回值类型
Class> param[] = m[i].getParameterTypes(); // 得到全部的参数类型
Class> exc[] = m[i].getExceptionTypes(); // 得到全部的异常 System.out.print(mod + " ");//输出每一方法的访问权限
System.out.print(ret + " ");//输出每一方法的返回值类型
System.out.print(metName + " (");//输出每一方法的名字
for (int x = 0; x < param.length; x++) {//循环输出每一方法的参数的类型
System.out.print(param[x] + "arg-" + x);
if (x < param.length - 1) {
System.out.print(",");
}
}
System.out.print(") ");
if (exc.length > 0) {// 有异常抛出
System.out.print("throws ");
for (int x = 0; x < exc.length; x++) {//循环输出每一方法所抛出的异常名字
System.out.print(exc[x].getName());
if (x < param.length - 1) {
System.out.print(",");
}
}
}
System.out.println();
}
}
}
Person
package org.lxh.demo.classdemo04;
interface Info {
public static final String AUTHOR = "MLDN";
public String jiekou=null;
public int shuzhi=0;
public String getInfo();
public String say(String name, String content);
public void sayHello();
}
public class Person implements Info {
private String name;
private int age;
public int phone;
public String sex;
public Person() {//无参构造方法
}
public Person(String name) {
this.setName(name);
}
public Person(String name, int age) {
this(name);
this.setAge(age);
}
public String getInfo() {
return "Hello World!!!";
}
public String say(String name, String content) {
return name + "说了:" + content;
}
public void sayHello() {
System.out.println("hello --> " + AUTHOR);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "姓名:" + this.name + ";年龄:" + this.age;
}
}