前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java - 反射机制(reflction)

Java - 反射机制(reflction)

作者头像
桑鱼
发布2020-03-18 15:14:27
2450
发布2020-03-18 15:14:27
举报

Class类与java.lang.reflect类库一起对反射的概念进行了支持,该类库包含了Field、Method以及Constructor类。这些类型的对象是由JVM在运行时创建的,用以表示未知类里对应的成员。所以可以使Constructor创建新的对象,用get()和set()方法读取和修改与Field对象关联的字段,用invoke()方法调用Method()对象关联的方法。另外还可以调用getFields()、getMethods()和getConstructors()等方法,以返回表示字段、方法以及构造器的对象的数组。这样,匿名对象的类信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。

Class.forName()生成的结果在编译时不可知的。因此所有的方法特征签名信息都是在执行时被提取出来的。反射机制提供了足够的支持,使得能够创建一个在编译时完全未知的对象,并调用此对象的方法。

代码语言:javascript
复制
package com.sangyu.test.test21;

public class User {

    private int id;
    private String name;
    private int age;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public User(){}
    public User(int id,String name,int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }
}
代码语言:javascript
复制
package com.sangyu.test.test01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ShowMethods {

    public static void main(String[] args) throws ClassNotFoundException {
        Class<?> c = Class.forName("com.sangyu.test.test21.User");
        Method[] methods = c.getMethods();
        Constructor[] constructors = c.getConstructors();
        for(Method method:methods){
            System.out.println(method);
        }

        System.out.println("");

        for(Constructor constructor:constructors){
            System.out.println(constructor);
        }
    }
}

getMethods()和getConstructors()方法分别返回Method对象的数组和Constructor对象的数组。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档