一次运行,到处报错 2022-11-27 11:51 采纳率: 87.5%
浏览 6
已结题

反射和动态代理这俩个问题

1.反射是什么意思,我网上查了一下,各位有没有更加通俗易懂的解释
2.动态代理是什么意思,各位有没有更加通俗易懂的解释

  • 写回答

2条回答 默认 最新

  • 龙猫爱抓鱼 2022-11-28 14:17
    关注

    1、反射:举个例子,我们一般调用方法的时候,可能就是通过<对象>.<方法名>这样直接调用,但是方法一般都是public的,如果是private方法,则不能通过这种方式简单调用,可以通过反射机制,调用private方法。java面向对象编程,把一组特性封装成对象,提供public接口供外部访问修改属性信息,不让外部直接修改对象的内部属性。而反射你可以这么理解,他可以把这个对象撕开,让你直接调用这个对象内部的方法和属性,直接破坏了封装的对象,让对象的属性和方法暴露在编程者面前,让程序员在编写代码的时候可以有更大的灵活性。

    img

        public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
            Student student = new Student();
            //直接调用私有方法编译报错 'get()' has private access in 'Student'
            //student.get();
    
            //通过反射调用
            Class aClass = Class.forName("Student");
            Method m = aClass.getDeclaredMethod("get", null);
            Object o = aClass.newInstance();
            m.setAccessible(true);
            m.invoke(o, null);
        }
    
    

    2、动态代理本质上就是通过反射实现的,它有一个目标对象和一个代理对象的概念,代理对象通过反射获取目标对象的指定方法,在调用目标对象对应方法的时候,对原方法进行增强或者补充,从而达到不变更目标对象的代码的前提下,实现程序的动态扩展。
    举个简单例子,比如你有一个类叫Student,这个类里面有个方法setAge(),在这个方法里需要对学生的年龄赋值;有另外一个类叫Teacher,里面有个方法叫setStAge(),在这个方法里需要调用学生类的setAge()方法对学生年龄赋值,同时赋值前后需要进行一些提示,比如“请输入学生年龄”;在这个例子中学生类就可以理解为目标对象,教师类就是代理对象,代理对象教师在不改变学生类原有setAge()方法的前提下,进行了方法增强,添加了提示信息“请输入学生年龄”。
    以上只是为了方便您理解,反射和动态代理远不止这些内容,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月27日

悬赏问题

  • ¥15 怎么使用hxe16进制编码器修改视频数据和图片一样!求教程!
  • ¥15 怎么用python模拟光的折射,反射,和全反射
  • ¥15 python打印机打印word和PDF文件出来的是乱码
  • ¥15 求达梦8数据库安装包
  • ¥15 YOLOv8模型网络结构更改后报错
  • ¥15 深度学习中梯度为None
  • ¥15 zynq烧写程序到flash后不运行
  • ¥15 裸板ESD问题的思考与实验
  • ¥15 electron+python
  • ¥50 远程调试PLC的解决方案的问题