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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小漠 中级黑马   /  2014-9-24 14:20  /  1096 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小漠 于 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. }
复制代码
检查了半天,看着挺对的,不知道为什么一直报实例化异常的错误。求助

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

9 个回复

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

点评

受教了!  发表于 2014-9-24 23:26
受教了!  发表于 2014-9-24 23:18

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报
3楼正解!学习了!
回复 使用道具 举报
liaorubei 发表于 2014-9-24 14:58
在一个类中,类的静态成员不能直接直接访问类的实例成员,
在你写的代码里面, MyClass是一个内部类,而main() ...

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

这个感觉应该会考~~学东西就要学个明白,不要抱有侥幸的小想法~~加油~~或许以后是同学
回复 使用道具 举报
学习了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马