黑马程序员技术交流社区

标题: 反射获取方法 [打印本页]

作者: 马林康    时间: 2012-7-27 21:30
标题: 反射获取方法
本帖最后由 马林康 于 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解决了 ,上面的代码是正确的了~

作者: fiend    时间: 2012-7-27 21:33
是不是方法名写错了?1和2。
作者: 李菁    时间: 2012-7-27 21:43
报的错误是找不到TestClass类中method_1方法。
你两个类是在一个包里吗?是不是包导错了
作者: 肖琦    时间: 2012-7-27 21:45
下面第06行代码有误,getMethod()方法的参数第一个是方法名,后面的参数是反射的方法的参数类型,并不是反射的方法的返回值类型。
希望对你有帮助......
作者: 刘春发    时间: 2012-7-27 21:47
getMethod()方法的参数第一个是方法名,第二个参数是反射的方法的参数类型.

.getMethod("method_1",null);


作者: 张立江    时间: 2012-7-27 21:58
楼上正解,
另外 invoke()方法里面如果没有参数,可以不写,也可以写上null
作者: 马林康    时间: 2012-7-27 22:00
张立江 发表于 2012-7-27 21:58
楼上正解,
另外 invoke()方法里面如果没有参数,可以不写,也可以写上null

嗯,学习了~
作者: 吴立杰    时间: 2012-7-27 22:24
  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 22:25
肖琦 发表于 2012-7-27 21:45
下面第06行代码有误,getMethod()方法的参数第一个是方法名,后面的参数是反射的方法的参数类型,并不是反 ...

6、7句都错了,这也给分啊?
作者: 肖琦    时间: 2012-7-27 22:57
吴立杰 发表于 2012-7-27 22:25
6、7句都错了,这也给分啊?

7没错,调用invoke方法时,第一个参数是调用方法的对象,后面的参数是调用的方法的参数,没有就不用写的,多看看讲反射的Method类!
作者: 吴立杰    时间: 2012-7-27 23:07
肖琦 发表于 2012-7-27 22:57
7没错,调用invoke方法时,第一个参数是调用方法的对象,后面的参数是调用的方法的参数,没有就不用写的 ...

谢啦,又发现自己的小问题,对不起咯,但是第6句不加null也可以的啊……




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