黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: 小漠    时间: 2014-9-24 14:20
标题: 反射问题
本帖最后由 小漠 于 2014-9-24 14:48 编辑
  1. import java.lang.reflect.Method;

  2. public class ReflectClass {

  3.         /**
  4.          * @param args
  5.          *
  6.          * 编写一个类,增加一个实例方法用于打印一个字符串,
  7.          * 并用反射手段创建该类的对象,并调用该对象的方法
  8.          * @throws NoSuchMethodException
  9.          * @throws Exception
  10.          */
  11.         public static void main(String[] args) throws Exception {
  12.                 // TODO Auto-generated method stub
  13.                 Class  clazz = MyClass.class;
  14.                
  15.                 //("printStr", String.class);第一个参数是要获得的方法名字,第二个是要传递的参数类型,没参数用null表示。
  16.                 Method method = clazz.getMethod("printStr", String.class);
  17.                 ////invoke调用方法(str, 1)第一个参数是在什么对象上面的方法,
  18.                 //如果这个参数为null则是在调用静态方法,第二个就是要传递的实际参数
  19.                 method.invoke(clazz.newInstance(), "Hello");

  20.         }
  21.         public class MyClass{
  22.                 public  void  printStr(String str){
  23.                         System.out.println(str);               
  24.                         }
  25.         }
  26. }
复制代码
检查了半天,看着挺对的,不知道为什么一直报实例化异常的错误。求助

作者: 小漠    时间: 2014-9-24 14:48
问题自己找到了。。。
作者: liu951753xz    时间: 2014-9-24 14:51
反射还正在学习呢,不知道这个入学考试的时候会不会考,希望考到了也是个简单的
作者: liaorubei    时间: 2014-9-24 14:58
在一个类中,类的静态成员不能直接直接访问类的实例成员,
在你写的代码里面, MyClass是一个内部类,而main()方法是一个静态方法,是不能直接访问的,
而且,内部类的实例化方式是不能直接实例化的,是要通过外部类的实例对象来实例化的,所以一般的实例化方式也是不行的,
你这里想要让代码正确执行,有两个改法,
第一,使MyClass成为外部类的静态成员,即添加static关键字,public static class MyClass,这样内部类的实例化就不          在要求先实例化外部类了,
第二,把你的MyClass代码移到外面去,变成和public class ReflectClass同一个级别的类,就可以了
如这样的
public class ReflectClass{}
public class MyClass{}
让这两个类的级别一样,不要放在内部做内部类了.:D


作者: daoqin    时间: 2014-9-24 15:03
3楼正解!学习了!
作者: 小漠    时间: 2014-9-24 19:39
liaorubei 发表于 2014-9-24 14:58
在一个类中,类的静态成员不能直接直接访问类的实例成员,
在你写的代码里面, MyClass是一个内部类,而main() ...

嗯嗯,讲的很清晰,自己试过几次,虽说改过来了,但是原理不清楚~~Thank you very very much~~:lol
作者: 小漠    时间: 2014-9-24 19:41
liu951753xz 发表于 2014-9-24 14:51
反射还正在学习呢,不知道这个入学考试的时候会不会考,希望考到了也是个简单的 ...

这个感觉应该会考~~学东西就要学个明白,不要抱有侥幸的小想法~~加油~~或许以后是同学
作者: darkads    时间: 2014-9-24 23:45
学习了,谢谢




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