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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 褚代江 中级黑马   /  2012-5-9 21:55  /  2570 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了张老师的反射后都知道了,可以利用反射得到类中的方法。
张老师的视频中提到了得到String类中的charAt(int a)方法
得到其他类中的main方法

问题来来,两个都是方法都是带参数的方法。那么我要用反射得到没有参数的方法,该怎么得到呢。
我试了下,就好像是得到Stirng类中的toString方法
Method methodToString=String.class.getMethod("toStirng", void.class);//因为是没有参数,那么这个getMethod的方法的第二个参数该怎样写呢,用null吗?我试了下,不行。老师说void也是预定义的Class实例对象,我也试了下,也运行出错。那么到底该怎么写呢?
System.out.println(methodToString.invoke(new int[]{1,4,2,5,8,6}, void.class));//还有这了的invoke方法的第二个参数,和上面那个是同一个字节码,要写什么呢?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
得到Stirng类中的toString方法
Method methodToString=String.class.getMethod("toStirng", void.class);//不能用void.class 无参数的时候直接不写,就可以

System.out.println(methodToString.invoke(new int[]{1,4,2,5,8,6}, void.class));//无参数,不用写
正确的如下:
得到Stirng类中的toString方法
Method methodToString=String.class.getMethod("toStirng");//
System.out.println(methodToString.invoke(new int[]{1,4,2,5,8,6}));
回复 使用道具 举报
得到Stirng类中的toString方法
Method methodToString=String.class.getMethod("toStirng", void.class);//不能用void.class 无参数的时候直接不写,就可以

System.out.println(methodToString.invoke(new int[]{1,4,2,5,8,6}, void.class));//无参数,不用写
正确的如下:
得到Stirng类中的toString方法
Method methodToString=String.class.getMethod("toStirng");//
System.out.println(methodToString.invoke(new int[]{1,4,2,5,8,6}));
回复 使用道具 举报
黄坚声 发表于 2012-5-9 22:01
得到Stirng类中的toString方法
Method methodToString=String.class.getMethod("toStirng", void.class);// ...
  1. import java.lang.reflect.Method;

  2. class  GetMethod
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 Method methodToString=String.class.getMethod("toStirng");
  7.                 System.out.println(methodToString.invoke(new int[]{1,4,2,5,8,6}));
  8.                 System.out.println("......................"+new int[]{1,4,2,5,8,6}.toString());
  9.         }
  10. }
复制代码
我这样写了,他运行时会报错啊
Exception in thread "main" java.lang.NoSuchMethodException: java.lang.String.toStirng()
        at java.lang.Class.getMethod(Class.java:1605)
        at com.day1.ReflectTest.main(ReflectTest.java:7)
回复 使用道具 举报
林康 发表于 2012-5-10 00:01
错误发生在:
        线程"main"中
错误的提示是:

大哥啊,我只是想知道Stirng类中的toString方法在反射中是怎样调用的,
顶楼我发的代码都是我的实验代码,会报错的,我能知道getMethod("toString",void.class)是调用toString(void)方法。但是我把代码改成getMethod("toString"),他还是报的这行的错误,说是在String中没有toString方法,不是向你说的是报的invoke那一行的错误。

还有你说的int[](int数组)怎么就不是Object类型的了,你要说int不是Object的那是的把
回复 使用道具 举报
林康 发表于 2012-5-10 13:45
我不太清楚你的意思了.如果只是想调用String类的toString方法的话,下面的代码是可以的:
        Method m ...

林康大哥啊,不好意思啊,这里我错了,我专门写了个帖子向你道歉了
http://bbs.itheima.com/thread-14130-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马