Java 反射学习《三》Method详解

2020-11-03  本文已影响0人  lq_ios

Java 反射学习《一》 Field详解

Java 反射学习《二》 Constructor详解

Java 反射学习《三》Method详解

根据Class获取类的Method

public class Demo {
    public void demoMethod1() {
    }

    public void demoMethod2() {
    }
    
    public static void demoMethod3() {
    }
}

public interface DemoInterface {
    public static void interfaceMethod1() {
    }

    public default void interfaceMethod2() {
    }

    public default void interfaceMethod3() {
    }
}

public class Person extends Demo implements DemoInterface {
    public void method1(String param1) {
        System.out.println("这是Method1 " + param1);
    }

    public boolean method1(int param1) {
        System.out.println("这是Method1");
        return true;
    }

    void method2(String param1, String param2) {
        System.out.println("这是Method2");
    }

    protected void method3(String param1, String param2, String param3) {
        System.out.println("这是Method3 " + param1 + " "+ param2 + " " + param3 );
    }

    private void method4(String param1, String param2, String param3) {
        System.out.println("这是Method4");
    }

    public static void method5(String param1) {
        System.out.println("这是Method5");
    }

    public void method5(int param1) {
        System.out.println("这是Method5");
    }

    @Override
    public void demoMethod1() {
        super.demoMethod1();
    }

    @Override
    public void interfaceMethod2() {
    }
}

Method常用方法

  1. public Class<?> getDeclaringClass() 获取声明该方法的类

  2. public String getName() 获取方法名

  3. public Parameter[] getParameters() 获取函数的参数

  4. public int getModifiers() 获取方法修饰符

  5. public Class<?> getReturnType() 获取返回值类型

  6. public Type getGenericReturnType() 获取泛型返回值类型

  7. public Type[] getGenericParameterTypes() 获取泛型参数类型

  8. public boolean isVarArgs() 是否允许带有可变数量的参数

  9. public boolean isSynthetic() 是否是合成构造函数

  10. public boolean isDefault() 是否是接口中的默认函数

  11. public Annotation[] getDeclaredAnnotations() 获取所有注解

  12. public Object invoke(Object obj, Object... args)throws IllegalAccessException, IllegalArgumentException,InvocationTargetException 根据传入的对象和参数执行方法

    Class cls = Person.class;
    Person person = new Person();
    try{
        //非静态方法传对象
        Method method1 = cls.getMethod("method1",String.class);
        method1.invoke(person,"参数1");
        //静态方法对象传null就行
        Method method5 = cls.getMethod("method5",String.class);
        method5.invoke(null,"参数5");
    }catch (Exception e){
    }
    
    //输出
    //这是Method1 参数1
    //这是Method5
    
上一篇 下一篇

猜你喜欢

热点阅读