栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记一篇IT培训日记048-关于反射思考

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记一篇IT培训日记048-关于反射思考

03月31日  月末了想回家   没心情

        又是一天上课,刀哥今天讲反射,玄之又玄的东东,一天下来,脑袋胀胀的,说不出懂还是不懂,这应该是别人说的似懂非懂吧。说懂,能理解java反射具体概念,会使用它对应的api,说不懂,就疑惑它为啥而存在,运用在哪些场景中。

        观察班上同学的表情,估计大家情况类似,这不,小胖又来了。

        小胖:叶子哥,来给哥解释解释,反射是个啥大白话讲一下啊~

        我:你当我是啥,大白话说来就来啊。反射我的理解是对java类,java构造器,java方法,java属性的进一步抽象。比如:根据所有类的特性抽象出字节码对象:Class,根据所有java构造器特性抽象出构造器类:Constructor,根据所有java方法特性抽象出方法类:Method,根据所有的java属性抽象出属性类:Feild。而这些类的实例又可以实现普通类,普通方法,普通属性操作。简单的理解Java提供2套操作的api,一套常规操作,一套反射操作。比如下面的例子:

public class User{
    private String username;
    public User(){
        System.out.println("调用构造器,创建了对象....");
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void doWork(){
        System.out.println("doWork.....");
    }
}

public class DemoTest {
    public static void main(String[] args) throws Exception {
        User user = new User(); //构建对象
        user.setUsername("叶子"); //设置属性
        System.out.println(user.getUsername()); //获取属性
        user.doWork(); //执行方法

        System.out.println("-----------------------------");
        Class userClz = User.class;
        //获取构造器对象
        Constructor constructor = userClz.getConstructor();
        //通过构造器创建实例对象
        User user1 = constructor.newInstance();

        //获取属性
        Field field = userClz.getDeclaredField("username");
        field.setAccessible(true); //打破私有限制
        field.set(user1, "叶子");  //设置属性
        System.out.println(field.get(user1)); //获取属性

        //获取方法
        Method doWork = userClz.getDeclaredMethod("doWork");
        doWork.invoke(user1); //执行方法
    }
}

   执行结果

调用构造器,创建了对象....
叶子
doWork.....
-----------------------------
调用构造器,创建了对象....
叶子
doWork.....

从上测试结果上看,确实可行啊。

        小胖:那反射为啥要做这种脱裤子放屁你,一套不就完了么?非要再整一套骚操作。

        我:我怎知道,你问刀哥呗,他能讲得出个所以然啦。

        说完,举起手啦~刀哥慢悠悠过来了

        小胖:刀哥,不不~老师,java 整一套反射用来干啥。

        刀哥:闲的蛋疼呗~

        小胖:刀哥,你确定?

        刀哥:你真信啊?业内有句话:反射机制是Java框架的基石,框架很多方便的操作都是使用反射啊。

        小胖:刀哥,你说跟没说有区别么~

        刀哥:我去,话都给你说啦,我还能说啥,当前还没学到框架,积累的技术点还不够,现在跟你提说动态代理,aop,ioc, di,参数注入这些,是不是一脸懵逼。这些都需要用到反射。

        小胖:......就没有当前阶段的解释么?

        刀哥:let me see  see.

        我:刀哥,可不可以这么理解,之前学习操作方式是用于实现业务代码。反射这种方式是用于实现工具(比如框架)性质的代码。工具(比如框架)性质代码实现需要考虑各种规则约定,各种拓展性等,对代码灵活要求很高,而反射操作方法可以满足,就分2套api啦。

        刀哥:这种解释靠谱。

        小胖:你们说啥啊,我都没听懂。

        我:没啥,就是说,实现业务时候,用我们之前学那套api即可,后续你牛逼啦,要独立设计框架时,就可以用反射啦。

        小胖:不是很懂,你是说,现在不用学反射??

        我:滚~~

        

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号