A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-7-27 21:30  /  2453 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马林康 于 2012-7-27 22:05 编辑
  1. public class TestClass {
  2. public void method_1()
  3. {
  4. System.out.println("hello");
  5. }
  6. public String method_2(String str){
  7. return str;
  8. }
  9. }
复制代码
反射获取method_1的方法并调用
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;

  3. public class ReflectDemo {
  4. public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException{
  5. Method method = Class.forName("io.TestClass").getMethod("method_1");
  6. method.invoke(Class.forName("io.TestClass").newInstance());
  7. }
  8. }
复制代码
代码那里错了 抛出异常


ok解决了 ,上面的代码是正确的了~

10 个回复

倒序浏览
是不是方法名写错了?1和2。
回复 使用道具 举报
报的错误是找不到TestClass类中method_1方法。
你两个类是在一个包里吗?是不是包导错了
回复 使用道具 举报
下面第06行代码有误,getMethod()方法的参数第一个是方法名,后面的参数是反射的方法的参数类型,并不是反射的方法的返回值类型。
希望对你有帮助......

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
getMethod()方法的参数第一个是方法名,第二个参数是反射的方法的参数类型.

.getMethod("method_1",null);

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解,
另外 invoke()方法里面如果没有参数,可以不写,也可以写上null
回复 使用道具 举报
张立江 发表于 2012-7-27 21:58
楼上正解,
另外 invoke()方法里面如果没有参数,可以不写,也可以写上null

嗯,学习了~
回复 使用道具 举报
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;

  3. public class ReflectDemo {
  4.         public static void main(String[] args) throws Exception{
  5.         //这两句代码都错了,楼主以后要仔细哦
  6.         Method method =
  7.                 Class.forName("io.TestClass").getMethod("method_1",null);
  8.        
  9.         method.invoke(Class.forName("io.TestClass").newInstance(),null);
  10.         }
  11. }
复制代码
回复 使用道具 举报
肖琦 发表于 2012-7-27 21:45
下面第06行代码有误,getMethod()方法的参数第一个是方法名,后面的参数是反射的方法的参数类型,并不是反 ...

6、7句都错了,这也给分啊?
回复 使用道具 举报
吴立杰 发表于 2012-7-27 22:25
6、7句都错了,这也给分啊?

7没错,调用invoke方法时,第一个参数是调用方法的对象,后面的参数是调用的方法的参数,没有就不用写的,多看看讲反射的Method类!
回复 使用道具 举报
肖琦 发表于 2012-7-27 22:57
7没错,调用invoke方法时,第一个参数是调用方法的对象,后面的参数是调用的方法的参数,没有就不用写的 ...

谢啦,又发现自己的小问题,对不起咯,但是第6句不加null也可以的啊……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马