使用反射调用静态方法:
静态方法不属于任何对象,静态方法属于类本身.
此时把invoke方法的第一个参数设置为null既可.
static public void doWork(String name){
System.out.println("Person.doWork()"+name);
}
m = clz.getMethod("doWork",String.class);
ret = m.invoke(null,"Lucy");
使用反射调用数组参数(可变参数)
解决办法:调用方法的时候把实际参数全部作为Object数组的元素既可.
调用静态方法:
public void test(){
//1.获取字节码对象
Class<?> clz = Class.forName("com.java520.class01.Person");
//2.获取静态方法
Method m = clz.getMethod("run");
//调用静态方法
m.invoke(null, null);//因为静态方法不需要对象就能 调用,所以不用传对象进去
}
调用含有数组参数的方法:
public void test(){
//1.获取字节码对象
Class<?> clz = Class.forName("com.java520.class01.Person");
//获取私有多参静态方法
Method m1 = clz.getDeclaredMethod("study", String[].class);
m1.setAccessible(true);
//m1.invoke(null, new String[]{"红楼梦","水浒传"});//error 因为引用类型会自动解包
m1.invoke(null, new Object[]{new String[]{"红楼梦","水浒传"}}); //正确方式 使用Object[] 数组包裹一层
}