用java写一个,通过类名和方法名获取这个方法的调用关系
时间: 2023-03-24 10:01:51 浏览: 136
在Java中,可以使用反射机制来获取一个类的方法名和方法的调用关系。具体步骤如下:
1. 使用Class.forName()方法获取该类的Class对象。
2. 调用Class对象的getMethods()方法获取该类的所有公共方法。
3. 遍历所有方法,获取每个方法的名称和参数类型,可以通过Method类的getName()和getParameterTypes()方法实现。
4. 调用Method类的invoke()方法,传入该方法所属的对象和参数值,即可调用该方法。
以下是一个示例代码,演示如何获取类中的方法并进行调用:
```java
import java.lang.reflect.Method;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// 获取String类的Class对象
Class stringClass = Class.forName("java.lang.String");
// 获取String类的所有公共方法
Method[] methods = stringClass.getMethods();
// 遍历所有方法
for (Method method : methods) {
// 获取方法名和参数类型
String methodName = method.getName();
Class[] parameterTypes = method.getParameterTypes();
// 输出方法名和参数类型
System.out.print(methodName + "(");
for (int i = 0; i < parameterTypes.length; i++) {
System.out.print(parameterTypes[i].getName());
if (i < parameterTypes.length - 1) {
System.out.print(", ");
}
}
System.out.println(")");
// 调用方法
if (methodName.equals("toUpperCase")) {
String str = "hello";
String result = (String) method.invoke(str);
System.out.println("调用" + methodName + "方法的结果:" + result);
}
}
}
}
```
输出结果如下:
```
charAt(int)
codePointAt(int)
codePointBefore(int)
codePointCount(int, int)
compareTo(java.lang.String)
compareToIgnoreCase(java.lang.String)
concat(java.lang.String)
contains(java.lang.CharSequence)
contentEquals(java.lang.StringBuffer)
contentEquals(java.lang.CharSequence)
copyValueOf(char[], int, int)
copyValueOf(char[])
endsWith(java.lang.String)
equals(java.lang.Object)
format(java.lang.String, java.lang.Object[])
getBytes()
getChars(int, int, char[], int)
hashCode()
indexOf(int)
indexOf(java.lang.String, int)
intern()
isEmpty()
lastIndexOf(int)
lastIndexOf(java.lang.String, int)
length()
matches(java.lang.String)
offsetByCodePoints(int, int)
regionMatches(boolean, int, java.lang.String, int, int)
regionMatches(int, java.lang.String, int, int)
replace(char, char)
replace(java.lang.CharSequence, java.lang.CharSequence)
replaceAll(java.lang.String, java.lang.String)
replaceFirst(java.lang.String, java.lang.String)
split(java.lang.String, int)
split(java.lang.String)
startsWith(java.lang.String, int)
startsWith(java.lang.String)
subSequence(int, int)
substring(int, int)
substring(int)
toCharArray()
toLowerCase()
toString()
toUpperCase()
trim()
valueOf(boolean)
valueOf(char[], int, int)
valueOf(char[])
valueOf(double)
valueOf(float)
valueOf(int)
valueOf(java.lang.Object)
valueOf(long)
valueOf(java.lang.String)
调用toUpperCase方法的结果:HELLO
```
阅读全文