获取运行时类的方法结构
总结于尚硅谷学习视频
https://www.bilibili.com/video/BV1Kb411W75N?p=651
MethodTest类
package com.day0324_2; import com.day0324_1.Person; import org.junit.jupiter.api.Test; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; /** * 获取运行时类的方法结构 * * */ public class MethodTest { @Test public void test1(){ Class clazz= Person.class; //getMethods():获取当前运行时类及其父类为public权限的方法 Method[] methods = clazz.getMethods(); for (Method m : methods) { System.out.println(m); } System.out.println(); //getDeclaredMethods():获取当前运行时类当中声明的所有方法(不包含父类中的) Method[] declaredMethods = clazz.getDeclaredMethods(); for (Method m : declaredMethods) { System.out.println(m); } } /* @Xxx 权限修饰符 返回值类型 方法名(参数类型1 形参名1,...)throws XxxException{ */ @Test public void test2(){ Class clazz= Person.class; Method[] declaredMethods = clazz.getDeclaredMethods(); for (Method m : declaredMethods) { //1.获取方法声明的注解 Annotation[] annos = m.getAnnotations(); for (Annotation a : annos) { System.out.println(a); } //2.权限修饰符 System.out.print(Modifier.toString(m.getModifiers())+"\t"); //3.返回值类型 System.out.print(m.getReturnType()+"\t"); //4.方法名 System.out.print(m.getName()); System.out.print("("); //5.形参列表 Class[] parameterTypes = m.getParameterTypes(); if (!(parameterTypes==null&¶meterTypes.length==0)){ for (int i=0;i< parameterTypes.length;i++){ if(i==0){ System.out.print(parameterTypes[i].getName()+" args_"+i); }else { System.out.print(","+parameterTypes[i].getName()+" args_"+i); } } } System.out.print(")"); //6.抛出异常 Class[] exceptionTypes = m.getExceptionTypes(); if (exceptionTypes.length>0){ System.out.print("throw "); for (int i=0;i<exceptionTypes.length;i++){ if(i==exceptionTypes.length-1){ System.out.print(exceptionTypes[i].getName()); break; } System.out.print(exceptionTypes[i].getName()+","); } } System.out.println(); } } }