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[]{"你好啊"});

打印结果

你好啊!!!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 及时清空脑子 装入圣人思想 丝毫不留我的懦弱理论 让世界之于我一片空白
    色十光五阅读 213评论 0 4
  • 第一本哲学书 看书断断续续花了一个月的时间,第一次看哲学相关的书,觉得很有意思,认为应该是一本不错的哲学入门书。书...
    好好听_efa0阅读 1,797评论 0 0
  • 我今天拼了小鹿,然后又拼了蜗牛、飞机、小狮子、小蜻蜓,我今天拼了好多东西,真高兴,真快乐!
    朵朵妮儿阅读 174评论 0 0
  • 有一天,妈妈回家时提了一袋又大又红的苹果,我忍不住就切开了一个吃起来。刚吃了一半,妈妈就让我去写一会儿作业,我就放...
    ecc40896f134阅读 183评论 0 0
  • 01 史工原是我们公司的技术总工,前两年的时候辞职从公司离开,后来听说去了竞争对手的公司。 史工在我们公司工作有1...
    清雨浅浅阅读 1,925评论 5 9