–原作者:尚硅谷-宋红康
通过反射获取方法的完整结构
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
public interface Work {
void work();
}
public class Creature {
public double weight;
private double height;
public Creature() {
}
private void breath(String name, String desc) {
System.out.println(name + " ,在呼吸" + desc + "!");
}
private static void motion() {
System.out.println("运动!");
}
@MyAnnotation(value = "MethodAnnotation")
private String testMethod1(String str1, Integer i1) throws FileNotFoundException, IOException {
return str1 + i1;
}
public class Person extends Creature implements Comparable<Integer>, Work {
public int age;
String name;
private static String nation="CHINA";
private Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
public Person() {
super();
}
public void eat() {
System.out.println("正在吃!");
}
private String info() {
return name + " ," + age + " ," + nation;
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
@Override
public int compareTo(Integer o) {
return 0;
}
@Override
public void work() {
}
}
@Test
public void testGetMethodCompleteStructure() throws Exception {
String className = "com.atweihai.reflection1.Person";
Class clazz = Class.forName(className);
Method[] methods = clazz.getSuperclass().getDeclaredMethods();
for (Method m : methods) {
// 获取方法的注解
Annotation[] anns = m.getAnnotations();
for (Annotation a : anns) {
System.out.println(a);
}
// 获取方法的修饰符
String modifier = Modifier.toString(m.getModifiers());
System.out.print(modifier + " ");
// 获取方法对的返回值类型
String returnType = m.getReturnType().getTypeName();
System.out.print(returnType + " ");
// 获取方法名
String methodName = m.getName();
System.out.print(methodName + " ");
// 获取方法的形参列表
Parameter[] paramter = m.getParameters();
System.out.print("(");
for (Parameter p : paramter) {
System.out.print(p + " ");
}
System.out.print(") ");
// 获取方法的抛出异常
Class[] exceTypes = m.getExceptionTypes();
if (exceTypes.length > 0) {
System.out.print("throws ");
for (Class et : exceTypes) {
System.out.print(et.getName() + " ");
}
}
System.out.println();
}
}