java反射-第2篇

开门见山

例A
User.java

package com.saictest.demo.controller;

public class User {
    private String name;
    private String age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
}

SystemUser.java

package com.saictest.demo.controller;

public class SystemUser extends User {
    private String password;

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    private void getxx(){

    }
}

测试类

package com.saictest.demo.controller;

import java.lang.reflect.Method;

public class DeclaredTest {
    public static void main(String[] args) throws ClassNotFoundException {
        Class cls = Class.forName("com.saictest.demo.controller.SystemUser");
        Method[] methods = cls.getMethods();
        for (Method m : methods) {
            System.out.println(m.getName());
        }

    }
}

输出结果

getPassword
setPassword
getName
setName
getAge
setAge
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll

小荷才露尖尖角

上面一个简单的例子可以感受下反射的简单用法,下面我们从最常用的写法入手逐步深入了解,我觉得学一个东西,熟能生巧,只有熟练的使用后才能更好的理解。

  • getDeclaredMethods和getMethods的区别

getDeclaredMethods:获取自身所有的方法,包括public,private,private
getMethods:获取的是类的所有公有方法,包括从父类、接口继承来的 public方法

从例A上可以看到getMethods 打印出父类和Obejct的所有公共方法,上面的例子稍微修改下

....
  Class cls = Class.forName("com.saictest.demo.controller.SystemUser");
        Method[] methods = cls.getDeclaredMethods();
        for (Method m : methods) {
            System.out.println(m.getName());
        }
....

打印的结果如下

getPassword
setPassword
getxx

同理getDeclaredMethod和getMethod也和上面一样

  • getDeclaredMethod和getMethod
    我在User.java中添加下面一个方法
public void doSomething(String str) {
        System.out.println(str +"!!!");
    }

再修改下DeclaredTest.java

Class cls = Class.forName("com.saictest.demo.controller.SystemUser");
Method method=cls.getMethod("doSomething",new Class[]{String.class});
method.invoke(cls.newInstance(),new Object[]{"你好啊"});

打印结果

你好啊!!!

你可能感兴趣的:(java反射-第2篇)