java中的反射


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 的方法和属性
在这里插入图片描述
调入private的属性
调用private的方法

总结

反射一个高级语言里的 通用功能,通过这样一种方式动态的来执行一些方法 比如:你不知道一个地方的经纬度,也能调用它的属性方法,不需要精确,但必须知道有这么个实例。 但是有一点就是反射比较慢,找的时候慢,执行方法速度一样。