美文网首页
25、反射(一)

25、反射(一)

作者: 爱学习的代代 | 来源:发表于2021-04-09 08:43 被阅读0次

    上面学习了Class类,反射主要是用来获取到类的属性和方法。

    几点说明:

    1. 另外一种获取class的方法: 类名.class
            Class clazz = MerchandiseV2.class;
    
    
    1. 通过filed获取实例的属性值: countField.get(v) , v代表的是实例化的对象。
            MerchandiseV2 v = new MerchandiseV2(1,"床单",100, 50, 30);
            Field countField = clazz.getField("count");
            System.out.println("通过反射获取一个实例count的值:" + countField.get(v));
    
    
    
    1. 通过field来修改成员变量的值:countField.set(v, 150); v代表是实例化的对象,150代表要传入的值。

    2. 通过filed获取所有的成员变量: clazz.getFields()

    实例代码如下:

    package day14;
    
    import java.lang.reflect.Field;
    
    public class TestReflect {
        public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
            MerchandiseV2 v = new MerchandiseV2(1,"床单",100, 50, 30);
    
    
    //      另一种获取Class类的方法:
            Class clazz = MerchandiseV2.class;
    
    //      Alt + Enter 解决报错问题
            Field countField = clazz.getField("count");
    //      通过反射获取一个实例count的值。
    
            System.out.println("通过反射获取一个实例count的值:" + countField.get(v));
    
    //      通过反射设置一个实例的成员变量
    
            countField.set(v, 150);
    //      查看设置的成员变量是否发生了变化:
            System.out.println(countField.get(v));
            System.out.println(v.count);
    
    
    
    
    //     class的getFileds方法:获取类的所有的属性。
    
            Field[] fields = clazz.getFields();
            System.out.println("输出所有的成员变量:");
            for (Field field : fields) {
                System.out.println(field);
            }
    
        }
    }
    
    
    
    

    运行结果:


    image.png

    附MerchandiseV2的成员变量:


    image.png

    疑问:

    1. 感觉不好理解,如果要获取的话,怎么不直接使用get、set方法呢?
    2. 观察输出结果,发现仅输出了count,count属性是设置成public才可以获取到的,那么私有属性如何获取呢?

    相关文章

      网友评论

          本文标题:25、反射(一)

          本文链接:https://www.haomeiwen.com/subject/pyzbkltx.html