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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. Method charAt = String.class.getMethod("charAt",int.class);
  2. System.out.println(charAt.invoke(str1,1)); //这里str1就是一个普通的String实例
  3. //我理解的获取方法的方式就是getMethod(方法名,参数)

  4. //下面的是main方法的反射
  5. String startingClassName = args[0];
  6. Method mainMethod = Class.forName(startingClassName).getMethod("main",String[].class);
  7. mainMethod.invoke(null,(Object)new String[]{"111","222","333"});

  8. //main方法按说就是一个特殊的静态方法而已,由上面的获取普通方法套路来看,不是应该是这样的

  9. // Method mainMethod = Class.forName(包含main方法的类名).getMethod("main",String[].class);

  10. //为什么是传入一个String的实例名
复制代码
到底是哪里理解错了呢?有没有大神用自己通俗的话跟我说下反射的意义在哪?总觉得很麻烦不知道方便在了哪里~

7 个回复

倒序浏览
这个就是要你自己指定类名啊@@
Class.forName(String xx) 括号里本来就是String参数 你所谓的“类名”就是个String
回复 使用道具 举报
织语不如书 发表于 2014-4-21 15:45
这个就是要你自己指定类名啊@@
Class.forName(String xx) 括号里本来就是String参数 你所谓的“类名”就是 ...

就是,好比有个Person类,应该Class.forName("cn.itcast.Person");然后用getMethod()获取其中的方法 ,这个获取main方法的为什么是传的是那个名称的......不知道这么说知道我什么意思么
回复 使用道具 举报
用反射的方式调:为什么?因为我在写程序的时候不知道要执行哪个类。

Java语言反射提供一种动态链接程序组件的多功能方法。它允许程序创建和控制任何类的对象,无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。
Java reflection 非常有用,它使类和数据结构能按名称动态检索相关信息,并允许在运行着的程序中操作这些信息。Java 的这一特性非常强大,并且是其它一些常用语言,如 C、C++、Fortran 或者 Pascal 等都不具备的。
回复 使用道具 举报
Method mainMethod = Class.forName(包含main方法的类名).getMethod(方法名,参数的类型);
mainMethod.invoke(对象名,参数的值);
因为main方法是静态的,所以不需要对象调用,直接传个Null就可以了
回复 使用道具 举报
宋超2356 发表于 2014-4-21 16:17
就是,好比有个Person类,应该Class.forName("cn.itcast.Person");然后用getMethod()获取其中的方法 ,这 ...

对啊 你这个获得main方法传的参数就是"cn.itcast.Person"  你要让args[0]="cn.itcast.Person"
回复 使用道具 举报
织语不如书 发表于 2014-4-21 17:06
对啊 你这个获得main方法传的参数就是"cn.itcast.Person"  你要让args[0]="cn.itcast.Person" ...

可是视频里args[]不是public static viod main(String [] args)中的那个args么?
回复 使用道具 举报
宋超2356 发表于 2014-4-21 18:10
可是视频里args[]不是public static viod main(String [] args)中的那个args么?

是啊 这个args你可以自己指定值的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马