76.反射-调用静态方法和数组参数方法

使用反射调用静态方法:

静态方法不属于任何对象,静态方法属于类本身.

此时把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[] 数组包裹一层
}

你可能感兴趣的:(76.反射-调用静态方法和数组参数方法)