java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java反射api

一文详解Java中的反射api

作者:会说法语的猪

这篇文章主要为大家详细介绍了Java中的6个反射api,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下

1. 调用无参数构造器得到一个类的对象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 定位无参构造器对象
    Constructor constructor = c.getDeclaredConstructor();
    // 暴力打开私有构造器的访问权限(如果是私有构造器、private 就可以使用setAccessible暴力打开)
    constructor.setAccessible(true);
    // 通过无参数构造器初始化对象返回
    Person person = (Person) constructor.newInstance();
    System.out.println(person);
}

2. 调用有参数构造器得到一个类的对象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 定位无参构造器对象
    Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class, String.class);
    // 暴力打开私有构造器的访问权限(如果是私有构造器、private 就可以使用setAccessible暴力打开)
    // constructor.setAccessible(true);
    // 通过无参数构造器初始化对象返回
    Person person = (Person) constructor.newInstance("WFT", 18, "1.88");
    System.out.println(person);
}

3. 获取全部的成员变量

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取全部声明的成员变量对象
    Field[] fields = c.getDeclaredFields();
    for (Field field : fields) {
        System.out.println(field.getName() + "-->>" + field.getType());
    }
}

4. 获取某个成员变量 并为其赋值

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取全部声明的成员变量对象
    Field nameField = c.getDeclaredField("name");
    System.out.println(nameField.getName() + "--->>" + nameField.getType());
    Person person = new Person();
    nameField.setAccessible(true); // 因为是私有属性 采用暴力反射!
    /**
     * 参数1:被赋值的对象
     * 参数2:该成员变量的值
     */
    nameField.set(person, "王大锤");
    System.out.println(person);
    /**
     * 获取改成员变量的值
     */
    String name = nameField.get(person) + "";
    System.out.println(name);
}

5. 获取所有的methods方法

public static void main(String[] args) {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取所有的方法
    Method[] methods = c.getDeclaredMethods();
    // 遍历看一下
    for (Method method : methods) {
        // 方法名称 参数个数 返回值类型
        System.out.println(method.getName() + "->" + method.getParameterCount() + "->" + method.getReturnType());
    }
}

6.  获取某个methods方法并执行

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class对象
    Class c = Person.class;
    // 获取setName方法
    Method setName = c.getDeclaredMethod("setName", String.class);
    // 调用方法
    Person person = new Person();
    Object o = setName.invoke(person, "WFT"); // 如果方法没有返回值  返回值为null
    System.out.println(o);
    System.out.println(person);
}

到此这篇关于一文详解Java中的反射api的文章就介绍到这了,更多相关Java反射api内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文