黑马程序员技术交流社区

标题: 关于反射中的Method类得到方法的问题 [打印本页]

作者: 褚代江    时间: 2012-5-9 21:55
标题: 关于反射中的Method类得到方法的问题
看了张老师的反射后都知道了,可以利用反射得到类中的方法。
张老师的视频中提到了得到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方法的第二个参数,和上面那个是同一个字节码,要写什么呢?
作者: 黄坚声    时间: 2012-5-9 22:01
得到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);//不能用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:30
黄坚声 发表于 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 12:30
林康 发表于 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 14:02
林康 发表于 2012-5-10 13:45
我不太清楚你的意思了.如果只是想调用String类的toString方法的话,下面的代码是可以的:
        Method m ...

林康大哥啊,不好意思啊,这里我错了,我专门写了个帖子向你道歉了
http://bbs.itheima.com/thread-14130-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2