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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梵天的梦 中级黑马   /  2014-2-22 11:21  /  1023 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.lang.reflect.*;

public class ReflectTest {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception{
               
                //利用反射调用String的charAt方法
                String string = "abcde";
                Method method = String.class.getMethod("charAt", int.class);
                System.out.println(method.invoke(string, 1));
               
                //普通形式调用charAt方法
                System.out.println(string.charAt(1));
        }


}
今天看了张老师的视频后写了这个关于反射调用类放的例子,有一点不明白想问问大家。
普通形式的调用charAt方法就可以实现的,为什么还用反射呢,而且感觉反射调用方法好繁琐。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
那是因为你了解String  知道它有charAt方法    但如果遇到其他人自定义的类时  你并不了解他内部的方法   
就只能通过反射调用的他的方法了

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
反射就是根据你的类来为你创建对象,如果你想获得这个类中的变量或者是方法的话,这些就要建立一个相应类的实例对象来表示,楼主的两种方式都行,但是如果我要是想获得字符串里其中某个字母,是不是要加特定的if语句来判断,但如果我在类中新建了个对象来修饰该字母,是不是就可以直接调用该对象来获得我想要的那个字母,也不知道说的对不对,我也是初学者,仅供参考!

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
反射主要使用在框架中,你编好一个程序,但是这个程序中所使用的类不一定就是固定的,可以通过配置文件来修改。这个时候就要使用反射了。

评分

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

查看全部评分

回复 使用道具 举报
也,许。 发表于 2014-2-22 12:13
反射主要使用在框架中,你编好一个程序,但是这个程序中所使用的类不一定就是固定的,可以通过配置文件来修 ...

有点明白了,谢谢了
回复 使用道具 举报
反射的作用------实现框架功能。
要使用别人写好的类,有两中实现方式:一种是,你去调用别人的的类,还有一种是别人的类来调用你的类,不管怎么弄,都是你在调用别人的类,这两种类有区别,一个叫框架,一个叫工具。你在用框架,是框架在调用你的类。框架和工具类的区别:都是别人写的,但是用法不一样,一个是人家调用你,一个是你调用人家。框架就是人家调用你。框架要解决的核心问题是:Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。因为在写程序时无法知道要被调用的类名,所以,在程序中,无法直接new某个类的实例对象了,而要用反射方式来做。
例如:跳过编译器,往某个泛型集合中加入其它类型的数据.
           ArrayList<String>  collection=new ArrayList<String>();
           ArrayList<Integer> collection2=new ArrayList<Integer>();
           System.out.println(collection.getClass()==collection2.getClass());

           //collection2.add("abcde"),不可以
          //用反射得到集合,再调用其add()方法即可。
          collection2.getClass().getMethod("add",Object.class).invoke(collection2, "abcde");
          System.out.println(collection2.get(0));

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马