一、获取方法结构
1、getMethods()
getMethods():获取当前运行时类及其所有父类中声明为public权限的方法
Demo:
1 @Test
2 public void test1() {
3
4 Class clazz = Person.class;
5
6 //getMethods():获取当前运行时类及其所有父类中声明为public权限的方法
7 Method[] methods = clazz.getMethods();
8 for (Method m : methods) {
9 System.out.println(m);
10 }
11 }
运行结果:
2、getDeclaredMethods()
getDeclaredMethods():获取当前运行时类中声明的所有方法。(不包含父类中声明的方法)
Demo:
1 @Test
2 public void test3() {
3
4 Class clazz = Person.class;
5
6 //getDeclaredMethods():获取当前运行时类中声明的所有方法。(不包含父类中声明的方法)
7 Method[] declaredMethods = clazz.getDeclaredMethods();
8 for(Method m : declaredMethods){
9 System.out.println(m);
10 }
11 }
运行结果:
3、getMethod(String name, Class<?> ... parameterTypes)
getMethod(String name, Class<?> ... parameterTypes):根据方法名获取指定的public修饰的某个方法(包含父类中继承的);
Demo:
1 @Test
2 public void test3() throws NoSuchMethodException {
3
4 Class clazz = Person.class;
5
6 /*
7 获取指定的public修饰的某个方法
8 getMethod():参数1 :指明获取的方法的名称 参数2:指明获取的方法的形参列表
9 */
10 Method show = clazz.getMethod("display", String.class, int.class);
11 System.out.println(show);
12
13 }
4、getDeclaredMethod(String name, Class<?> ... parameterTypes)
getDeclaredMethod(String name, Class<?> ... parameterTypes):获取本类中指定的某个方法,忽略权限修饰符(不包含父类继承的)。
Demo:
1 @Test
2 public void test4() throws NoSuchMethodException {
3
4 Class clazz = Person.class;
5
6 /*
7 获取本类中指定的某个方法
8 getDeclaredMethod():参数1 :指明获取的方法的名称 参数2:指明获取的方法的形参列表
9 */
10 Method show = clazz.getDeclaredMethod("show", String.class);
11 System.out.println(show);
12
13 }
说明:
① name 参数是一个 String 对象,它指定所需方法的简称
② parameterTypes 参数是 Class 对象的一个数组或 0~n个 Class 对象,它按声明顺序标识该方法的形参类型
③ 如果是无参方法,那么 parameterTypes 可以不传或者传 null。
④ 因为可能存在重载的方法,所以在一个类中唯一确定一个方法,需要方法名和形参类型列表。
二、获取方法的信息
一个类中的方法可以有修饰符,返回值类型,方法名和异常列表等信息。这些都可以获取到。
常用方法:
1 2 3 4 | public Class<?> getReturnType()取得全部的返回值 public Class<?>[] getParameterTypes()取得全部的参数 public int getModifiers()取得修饰符 public Class<?>[] getExceptionTypes()取得异常信息 public String getName()获取方法名 public Annotation[] getAnnotations()获取注解信息 |
Demo:
1 /*
2 @Xxxx
3 权限修饰符 返回值类型 方法名(参数类型1 形参名1,...) throws XxxException{}
4 */
5 @Test
6 public void test(){
7 Class clazz = Person.class;
8 Method[] declaredMethods = clazz.getDeclaredMethods();
9 for(Method m : declaredMethods){
10 //1.获取方法声明的注解
11 Annotation[] annos = m.getAnnotations();
12 for(Annotation a : annos){
13 System.out.println(a);
14 }
15
16 //2.权限修饰符
17 System.out.print(Modifier.toString(m.getModifiers()) + "\t");
18
19 //3.返回值类型
20 System.out.print(m.getReturnType().getName() + "\t");
21
22 //4.方法名
23 System.out.print(m.getName());
24 System.out.print("(");
25 //5.形参列表
26 Class[] parameterTypes = m.getParameterTypes();
27 if(!(parameterTypes == null && parameterTypes.length == 0)){
28 for(int i = 0;i < parameterTypes.length;i++){
29
30 if(i == parameterTypes.length - 1){
31 System.out.print(parameterTypes[i].getName() + " args_" + i);
32 break;
33 }
34
35 System.out.print(parameterTypes[i].getName() + " args_" + i + ",");
36 }
37 }
38
39 System.out.print(")");
40
41 //6.抛出的异常
42 Class[] exceptionTypes = m.getExceptionTypes();
43 if(exceptionTypes.length > 0){
44 System.out.print("throws ");
45 for(int i = 0;i < exceptionTypes.length;i++){
46 if(i == exceptionTypes.length - 1){
47 System.out.print(exceptionTypes[i].getName());
48 break;
49 }
50
51 System.out.print(exceptionTypes[i].getName() + ",");
52 }
53 }
54
55 System.out.println();
56 }
57 }
运行结果:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器