首页 > 其他 > 详细

反射机制入门

时间:2021-05-04 23:31:50      阅读:20      评论:0      收藏:0      [点我收藏+]

一、什么是反射机制?

  Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,

可以了解任意一个对象所属的类,

可以了解任意一个类的成员变量和方法,

可以调用任意一个对象的属性和方法。

这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

二、获取Class类型对象的三种方式

public static void main(String[] args) {
    Class c1 = null;
    try {
        //第一种方式:Class.forName("完整类名");
        c1 = Class.forName("java.lang.String");
        Class c2 = Class.forName("java.util.Date");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    //第二种方式:类名.class
    Class c3 = java.lang.String.class;
    /**
     * 第三种方式:
     *  先创建对象,拿到对象的引用
     *  调用对象的getClass方法拿到Class对象
     */
    String s = new String();
    Class c4 = s.getClass();
    System.out.println(c1 == c3);//true
    System.out.println(c3 == c4);//true,说明两个对象的内存地址是一样的
}

三、反射获取属性Filed

User类:

class User {
    private String name;
    private Integer age;
    private String sex;
}

反射获取User对象:

public static void main(String[] args) throws Exception {
    Class<?> demo = Class.forName("User");
    Object obj = demo.newInstance();
    // 获取这个对象
    Class<?> objClass = obj.getClass();
    // 获取到所有的属性
    Field[] fields = objClass.getDeclaredFields();
    for (Field field : fields) {
        // 获取修饰符
        int i = field.getModifiers();
        String modifier = Modifier.toString(i);
        // 获取属性类型
        Class<?> type = field.getType();
        String simpleName = type.getSimpleName();
        // 获取属性名
        String fieldName = field.getName();
        System.out.println(modifier + " " + simpleName + " " + fieldName);
    }
}

输出结果:

private String name
private Integer age
private String sex

  

  

  

反射机制入门

原文:https://www.cnblogs.com/zhangzhixi/p/14730476.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!