获取运行时类的方法结构

获取运行时类的方法结构

总结于尚硅谷学习视频
视频链接
https://www.bilibili.com/video/BV1Kb411W75N?p=651
所用Person类

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&&parameterTypes.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();


        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日星月云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值