java反射main方法的中的那点小问题,求解

public class Person {
public static void main(String[] args) {
System.out.println("mian" + args[0]);
}
}

public class Reflect_method {
private Class clazz;

@Before
public void setUp() throws Exception {
    // 获取字节码(class)文件对象
    clazz = Class.forName("cn.reflect.Person");
}

@Test
public void test4() throws Exception{
    Method m = clazz.getMethod("main", String[].class);
    Object[][] objs = new Object[2][2];
    String[] strs1 = new String[2];
    String[] strs2 = new String[2];
    strs1[0] = "a";
    strs1[1] = "b";
    strs2[0] = "c";
    strs2[1] = "d";
    //new Object[]{new String[]{"a","b","c"}}
    m.invoke(null, objs);
}

}

代码如上,m.invoke(null, objs);中的第二个参数如果传入objs就会抛出非法参数异常,但是如果传入new Object[]{new String[]{"a","b","c"}}就可以正常运行,难道这两个二维数组的定义有区别么,我自认为没有区别,那么为什么结果会不一样呢?
菜鸟一枚坐等大神解答..

@Test
public void test4() throws Exception{
Method m = clazz.getMethod("main", String[].class);
Object[][] objs = new Object[2][2];
String[] strs1 = new String[2];
String[] strs2 = new String[2];
strs1[0] = "a";
strs1[1] = "b";
strs2[0] = "c";
strs2[1] = "d";
objs[0] = strs1;
objs[1] = strs2;
//new Object[]{new String[]{"a","b","c"}}
m.invoke(null, objs);
}

...上面代码少打了2串,赶快补上!问题如上

....好吧,是我学晕了,把代码搬上来才发现问题.... 尴尬啊...怎么删帖

不用担心 你的贴 很快就会被 湮没的

JDK升级兼容的问题
jdk1.5 Method.invoke(Object obj,Object...args);
jdk1.4 Method.invoke(Object obj,Object obj[]);
为了兼容jdk1.4,你传new Object[]{new String[]{"a","b","c"}},相当于把new String[]{"a","b","c"}传递给了main方法的args
你传objs,相当于把objs[0]和objs[1]传递给了main方法的args,传两个参数进去,所以非法