zoukankan      html  css  js  c++  java
  • Java反射关于getDeclaredMethods()和getMethods()的区别

    先上代码

    父类

    public class Person {

    public Person(){

    }

    public boolean isPerson() {

    return true;
    }

    public void test() {
    System.out.println("person test");
    }

    }
    子类

    public class User extends Person{

    public void publicMethod() {

    }

    private void privateMethod(){
    }


    protected void protectedMethod(){

    }

    void defaultMethod(){

    }

    public User(){}

    public User(String name,int age){
    System.out.println(name+"今年"+age+"岁");
    }
    }
    测试类

    public class MainInvoke {

    public static void main(String[] args) {

    User user = new User();

    Class clazz = user.getClass();
    System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓getDeclaredMethods()↓↓↓↓↓↓↓↓↓↓↓");
    Method[] declaredMethods = clazz.getDeclaredMethods();
    for (Method method : declaredMethods) {
    System.out.println(method.getName());
    }
    System.out.println("--------------------------------------------");
    System.out.println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓getMethods()↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
    Method[] methods = clazz.getMethods();
    for (Method method : methods) {
    System.out.println(method.getName());
    }
    }

    //使用newInstance创建Class的示例,默认会使用无参构造器,并且无参构造器不能私有
    User newInstance2 = clazz.newInstance();
    newInstance2.test();

    //使用指定构造器创建Class示例
    Constructor<?> constructor = clazz.getConstructor(String.class,int.class);
    Object[] obj = new Object[]{"张大炮",28};
    User newInstance = (User)constructor.newInstance(obj);
    newInstance.test();

    }
    运行结果:

    总结:

    两个方法都会返回 Method 对象的一个数组,区别在于

    1、getDeclaredMethods()可以拿到反射类中的公共方法、私有方法、保护方法、默认访问,但不获得继承的方法。

    2、getMethods(http://www.amjmh.com/v/BIBRGZ_558768/)可以拿到反射类及其父类中的所有公共方法。
    ---------------------

  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11331559.html
Copyright © 2011-2022 走看看