2 cool898163com cool898163com 于 2014.11.09 21:06 提问

关于反射类的方法参数问题

1、 //public Class[] run(String str,String[] i)
@Test
public void test3() throws Exception{
Person p=new Person();
Class clazz=Class.forName("cn.itcast.reflect.Person");
Method method=clazz.getMethod("run", String.class,String[].class);
Class[] cs=(Class[])method.invoke(p, "lz",new String[]{"aa","bb","cc"});
System.out.println(cs);
}
2、//public static void main(String[] args)
@Test
public void test5() throws Exception{
Class clazz=Class.forName("cn.itcast.reflect.Person");
Method method=clazz.getMethod("main", String[].class);
method.invoke(null, new String[]{"aa","bb"});
//method.invoke(null, (Object)new String[]{"aa","bb"});
//method.invoke(null, new Object[]{new String[]{"aa","bb"}});
}
为什么第一部分代码在String数组传参的时候不会报错,而第二部分代码String数组像第一部分传参的时候会显示参数个数错误(第二部分已修正)

1个回答

save4me
save4me   Ds   Rxr 2014.11.19 10:22
已采纳

参考 Java反射研究(2)

注:如果参数中有数组,比如 public static void main(String[]args);

Method m = c1.getMethod("main",String[].class);
m.invoke(null,(Object)new String[]{"aa","bb"});是对的;
m.invoke(null,new String[]{"aa","bb"}); 会调用 main(String,String);函数;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
利用反射获取一个类中的所有方法和该方法的参数
因为平时用反射很少,之前一次面试被问到反射这块的一个问题,很简单,当时给了个不是很确切的答案,回家之后也忘了去找出这个问题的答案,今天手头上的工作比较闲,就把之前的那个问题给解决下。 被问到的是,我只知道一个类和他其中的一个方法,不知道方法的参数情况,我怎么定位到这个方法?这个问题我想到的就是反射获取这个类的所有方法,然后去找它的参数(当时不确定有方法能获取参数类型),在反过来调用这个方法。然后
javassist:增强型的java反射工具,获取方法参数名
java的反射是不能获取方法的参数名的。比如: public String concatString(String str1,String str2){ return str1+str2; } 想获取"str1",和"str1"这个参数名,使用JDK自带的反射是不行的。但是我们借助第三方包javaassist就可以获得。 public stati
java反射获取方法参数名称
java原始的反射是不能获取方法菜蔬的名称的..这里借住了地方jar包 使用maven管理jar org.javassist javassist 3.18.1-GA java示范代码 Class clazz = IExample.class; try { ClassPool pool = ClassPool.getD
如何使用java反射技术调用类和方法及给方法传参
//动态加载类 Scanner scan = new Scanner(System.in); System.out.println("输入类名:"); String className = scan.nextLine(); Class cls = Class.forName(className); //1.找到demo方
反射2:获取类的方法(通过方法名调用方法),属性,声明
package cn.itcast.jdbc;import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;import cn.itcast.domain.User;public
Java——通过反射获取函数参数名称
通过javassit获取参见 http://blog.csdn.net/viviju1989/article/details/8529453 这篇文章的方法一,实现比较麻烦,就不说了。通过spring的LocalVariableTableParameterNameDiscovererpublic static List<String> getParamterName(Class clazz, Str
java通过反射+javassist获得方法所有信息(返回值、方法名、参数类型列表、参数列表)
众所周知,使用java的反射无法获得方法参数名列表,只能获得方法参数类型列表,在网上研究了一下,发现有下面两种方式实现: 方案一:使用反射+javassit库static void javassistGetInfo() throws Exception{ Class clazz = Class.forName("fanshe.Person"); ClassPool pool = Cl
java反射机制,通过类名获取对象,通过方法名和参数调
try { //得到类对象 Class c = Class.forName("完整类名"); Object yourObj = c.newInstance(); //得到方法 Method methlist[] = cls.getDeclaredMethods(); for (int i = 0; i < methlist.length; i++) { Method m = methlis
java反射:使用asm 获取方法的参数名
[Java]代码 /** * Classes.java 9:22:44 AM Apr 23, 2012 * * Copyright(c) 2000-2012 HC360.COM, All Rights Reserved. */ package cn.outofmemory.demo; import java.io.IOException; import java.lang.reflec
关于反射的面试题
1.Java反射机制的作用? (1)在运行时判断任意一个对象所属的类。 (2)在运行时判断任意一个类所具有的成员变量和方法。      (3)在运行时任意调用一个对象的方法。      (4)在运行时构造任意一个类的对象。 2.什么是反射机制? 反射就是动态加载对象,并对对象进行剖析。在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它