title: 每日深耕,勤练不缀
有一个想法,就是将自己每天对技术的感悟写下来,有时候我们弄通一个小技术,感觉太丢人了,这么小的东西怎么写。但是我就要写,因为我以后会用到,大家以后也会用到。
本节的内容是反射(reflection)
前言
每个java小白都会遇到的阵痛,我写下来。
一句古语:秦人不暇自哀而后人哀之,后人哀之而不鉴之,亦使后人复哀后人也。
Class(注意大写),是类的类
Class clazz =MerchandiseV2.class
此处string[ ]是一个变长函数,可以自定义变长。
使用反射(reflection)访问属性
Field countField = clazz.getField(“count”);
System.out.println(countField.get(m100));
countField.set(m100,888);
System.out.println(countField.get(m100));
System.out.println(m100.count);
也许通过这段代码你可以理解Field 的意义,Field代表在Class clazz定义的那个类里的所有成员变量。
所以才会有这句
Field countField = clazz.getField(“count”);
下面我们可以通过遍历更加了解Field
这是另一种调用方法。
我们还可以调用静态变量
Field field =clazz.getField(name:“STATIC_MEMBER”);
System.out.println(field.get(null));
通过反射调用成员变量和静态变量
当然,我们需要清楚我们定义的clazz必须是这个类本类或者是这个类的父类才行。
接下来呢,我们要利用反射来调用clazz这个类中的方法:
接下来
我们演示一下
反射能做到,平常调用做不到的方法
调用private 的方法和属性
总结
反射一个高级语言里的 通用功能,通过这样一种方式动态的来执行一些方法
比如:你不知道一个地方的经纬度,也能调用它的属性方法,不需要精确,但必须知道有这么个实例。
但是有一点就是反射比较慢,找的时候慢,执行方法速度一样。