1.反射是什么意思,我网上查了一下,各位有没有更加通俗易懂的解释
2.动态代理是什么意思,各位有没有更加通俗易懂的解释
反射和动态代理这俩个问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 龙猫爱抓鱼 2022-11-28 14:17关注
1、反射:举个例子,我们一般调用方法的时候,可能就是通过<对象>.<方法名>这样直接调用,但是方法一般都是public的,如果是private方法,则不能通过这种方式简单调用,可以通过反射机制,调用private方法。java面向对象编程,把一组特性封装成对象,提供public接口供外部访问修改属性信息,不让外部直接修改对象的内部属性。而反射你可以这么理解,他可以把这个对象撕开,让你直接调用这个对象内部的方法和属性,直接破坏了封装的对象,让对象的属性和方法暴露在编程者面前,让程序员在编写代码的时候可以有更大的灵活性。
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无用
悬赏问题
- ¥15 怎么使用hxe16进制编码器修改视频数据和图片一样!求教程!
- ¥15 怎么用python模拟光的折射,反射,和全反射
- ¥15 python打印机打印word和PDF文件出来的是乱码
- ¥15 求达梦8数据库安装包
- ¥15 YOLOv8模型网络结构更改后报错
- ¥15 深度学习中梯度为None
- ¥15 zynq烧写程序到flash后不运行
- ¥15 裸板ESD问题的思考与实验
- ¥15 electron+python
- ¥50 远程调试PLC的解决方案的问题