java学习(1) ----getMethod()和getDeclaredMethod()的区别(转)

转自: https://blog.csdn.net/qq_36443736/article/details/82890011

getMethod():获取自身能用所有的public公共方法。1.类本身的public 2.继承父类的public 3.实现接口的public

getDeclaredMethod():获取类自身声明的所有方法,包含public、protected和private方法。。

getMethod()获取继承父类的public方法举例:

public class Father {
 
    public Father() {
        System.out.println("调用了父类构造方法");
    }
    
    public void fatherSay() {
        System.out.println("我是爸爸");
    }
}
 
 
public class Son extends Father {
 
    public Son() {
    
        // TODO Auto-generated constructor stub
        System.out.println("调用了子类构造方法");
    }
    
    public void sonSay() {
        System.out.println("我是儿子");
    }
    public static void main(String[] args) {
        Son son=new Son();
        son.fatherSay();
    }
}
View Code

测试类:

public class test1 {
 
    public static void main(String[] args) {
        Class clazz=Son.class;
        try {
              //报错 NoSuchMethodException
            Method method =clazz.getDeclaredMethod("fatherSay");
            method.invoke(clazz.newInstance());
            
                //运行结果:
                //调用了父类构造方法
                //调用了子类构造方法
                //我是爸爸
            Method method2 =clazz.getMethod("fatherSay");
            method2.invoke(clazz.newInstance());
 
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}
View Code

 

java.lang.Class.getDeclaredMethod()方法用法

http://www.itkeyword.com/doc/7856500677696294646/java-method-getDeclaredMethodlang

注:方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法。

描述

java.lang.Class.getDeclaredMethod()方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法。

name 参数是一个字符串,指定所需的方法的简单名称,

parameterTypes 参数是一个数组的Class对象识别方法的形参类型,在声明的顺序



声明

public Method getDeclaredMethod(String name, Class... parameterTypes) throws NoSuchMethodException,SecurityException



参数
name -- 方法的名称
parameterTypes -- 参数数组


返回值
匹配指定名称和参数的类的方法,此方法返回的Method对象


异常
NoSuchMethodException -- 如果匹配方法未找到

NullPointerException -- 如果name 为 null.


SecurityException -- If a security manager, s, is present.


实例
如何使用java.lang.Class.getDeclaredMethod()方法

package com.app.ui;

import java.lang.reflect.*;

public class ClassDemo {

   public static void main(String[] args) {
    
     ClassDemo cls = new ClassDemo();
     Class c = cls.getClass();

     try {
        // parameter type is null
        Method m = c.getDeclaredMethod("show", null);
        System.out.println("method = " + m.toString()); 
    
        // method Integer
        Class[] cArg = new Class[1]
        cArg[0] = Integer.class;
        Method lMethod = c.getDeclaredMethod("showInteger", cArg);
        System.out.println("method = " + lMethod.toString());

     }catch(NoSuchMethodException e){
        System.out.println(e.toString());
     }
   }


   private Integer show() {
      return 1;
   }
    
   public void showInteger(Integer i) {
      this.i = i;
   }
   public int i = 78655;
}

编译和运行程序,产生以下结果:

method = private java.lang.Integer ClassDemo.show()
method = public void ClassDemo.showInteger(java.lang.Integer)

invoke调用类中的方法,最简单的用法是可以把方法参数化
invoke(class, method)
比如你Test类里有一系列名字相似的方法setValue1、setValue2等等
可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue
原文地址:https://www.cnblogs.com/Lee-yl/p/11512889.html