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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何竹冬 中级黑马   /  2013-1-4 20:49  /  1389 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何竹冬 于 2013-1-6 13:43 编辑

视频上老师在讲反射的时候下面这段代码时获取某个对象所属类中指定的方法
  1. import java.lang.reflect.*;
  2. public class InputReaderTest
  3. {
  4. public static void main(String[] args) throws Exception
  5. {
  6. String str1 = "abc";
  7. //获取String字节码对象调用getMethod方法
  8. Method methodCharAt = String.class.getMethod("charAt",int.class);
  9. System.out.println(methodCharAt.invoke(str1,1));

  10. }
复制代码
我想的是先获取调用方法的对象所属类的字节码对象,然后获取对象所属类的方法,这样写是不是更容易理解一些呢 ?
  1. import java.lang.reflect.*;
  2. public class InputReaderTest
  3. {
  4. public static void main(String[] args) throws Exception
  5. {
  6. String str1 = "abc";
  7. //获取str1字符串对象所属类String字节码对象调用getMethod方法
  8. Method methodCharAt=str1.getClass().getMethod("charAt",int.class);
  9. System.out.println(methodCharAt.invoke(str1,1));

  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨雯雯 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
你得知道String.class和str1.getClass()所获取的对象是同一个:String类的字节码文件。
回复 使用道具 举报
这个没什么区别,字节码就只有一份,获取字节码有3种方法,你用的是其中而已,老师用的是另外一种
回复 使用道具 举报
Method methodCharAt = String.class.getMethod("charAt",int.class);
在应用中这样写,你首先要知道这个类的名字,通过 :类名.class的方法获得字节码
Method methodCharAt=str1.getClass().getMethod("charAt",int.class);
这样写需要先有这个类的对象,通过:对象.getClass()方法获得字节码。
这两中方式能够实现同样的功能,只是应用场合不同。


在实际应用中用到最多的是Class.forName("java.lang.String")的方式获得字节码,
因为在框架设计的时候,这个类还不存在,那么设计框架的时候,不知道类名,也没有对象,就只能通过Class.forName("java.lang.String")这种方式创建对象,这样获取字节码的方式只需要一个字符串,只要把这个字符串添加到配置文件中就可以,要知道我们编译完的class文件用户是不能改变的,但是用户可以改变配置文件,我们只要事先在程序中写入加载配置文件的功能就可以。

这一点张孝祥老师讲的非常好,多看看视频。。。
回复 使用道具 举报
焦健 发表于 2013-1-4 22:24
Method methodCharAt = String.class.getMethod("charAt",int.class);
在应用中这样写,你首先要知道这个类 ...

你好,我知道都可以,不知道你想说什么。。。
回复 使用道具 举报
何竹冬 发表于 2013-1-4 22:57
你好,我知道都可以,不知道你想说什么。。。





我想说的是,这三种方式分别应用于不同的场合,完毕!
回复 使用道具 举报
焦健 发表于 2013-1-4 23:03
我想说的是,这三种方式分别应用于不同的场合,完毕!

好吧,多谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马