null1524401983342.jpg
一张来自非洲的微笑,一首百听不厌的老歌,还有每天穿梭在网络间的各位老铁们,上节我们讲了反射的Method,遗漏了点东西,在这里将它补上,若我们利用反射调用静态方法时又如何呢?
利用反射调用静态方法
我们知道,静态方法不属于任何对象,只属于类本身,直接上代码
代码示例 :
QQ截图20180505111426.png
这是我定义的一个Person类,并定义一个静态方法,我们来看测试代码:
测试代码:
QQ截图20180505111555.png
QQ截图20180505111636.png
QQ截图20180505111907.png
以上是我们代码的测试和结果,最后一张截图是API中method类中的invoke的官方解释,允许我们将obj参数设置为null,前提是该方法是静态方法。
接下来我们来看看利用反射调用数组的可变参数,直接上代码:
代码如下:
class emp {
public static void work(int...arr){
System.out.println(Arrays.toString(arr));
}
public static void work(String ...arr) {
System.out.println(Arrays.toString(arr));
}
}
上述代码中,我们通过创建emp类,并创建了两个静态的可变参数的方法,来看测试代码:
代码如下:
利用反射调用数组参数(可变参数)
public class StaticMethodDemo {
public static void main(String[] args)throws Exception {
若数组为基本数据类型
Class clazz = emp.class;
Method method = clazz.getDeclaredMethod("work", int[].class);
method.invoke(null,new int[]{1,2,3,4,5});
若数组为引用类型
Method method1 = clazz.getMethod("work", String[].class);
将它包装成一个 Object[]数组
method1.invoke(null,new Object[]{new String[]{"A","b","C"}});
}
结果如下:
QQ截图20180505173843.png
这就是我们利用反射来操作静态方法,以及数组的可变参数基本过程。