反射面试题
学习时用到的文章参考:
标题:《Java的反射机制》作者:JustJavaIt 链接:https://www.cnblogs.com/liaowenhui/p/12571362.html
标题:《Java反射(超详细!)》作者:一个快乐的野指针~ 链接:https://blog.csdn.net/qq_44715943/article/details/120587716
标题:《Java 反射 -超详细讲解(附源码)》作者:皮卡卡西 链接:https://blog.csdn.net/lililuni/article/details/83449088
标题:《Java反射常见面试题》作者:SileeLiu 链接:https://blog.csdn.net/qq_37875585/article/details/89340495
1.什么是反射?
Java反射是指Java程序运行时对于任意一个类,可以动态地获得和使用这个类的所有属性,方法,构造方法。
tips:官方定义:在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制。
2.哪里用到反射机制?
1)JDBC使用反射来加载驱动程序(通过加载时运行静态代码块实现)。
至于为什么可以参考文章:https://segmentfault.com/q/1010000000315618/a-1020000000317423
2)Spring的IOC容器初始化过程:1)将配置文件加载到内存。2)Java程序解析配置文件。3)通过反射获得类的实例。4)由配置文件初始化实例的属性。
3)各种IDE开发工具使用反射来动态提示类的方法属性及报错。
4)Web程序中Servlet生命周期利用了反射机制(待消化)。
5)动态代理的实现依赖反射机制。
6)Mybatis返回对象时通过反射完成对象的创建和属性的赋值。
3.怎么获得字节码文件?
1)通过Class.forName("全限定名")
2)通过类名Object.Class
3)通过对象object.getClass
常用第一种。
4. 什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?有哪些应用场景?
前言:Java程序经常创建一些可复用的对象,使用时这些对象存储在JVM里,一般对象的生命周期不会比JVM长,但是某些场景我们需要关闭JVM后,依然保存这些对象以便将来重新生成这些对象,即持久化。
序列化:将一个Java对象转化成一组字节,我们称之为序列化。反之将这些字节转化为Java对象,称之为反序列化。
需要哪些工作:Java为我们提供了序列化接口,为了保持序列化顺序稳定,建议增加序列化编号,如果不想保存到磁盘上,可以给字段transient关键字(static字段天然不会持久化)。
应用场景:除了磁盘的持久化以外,在网络中传输,包括RMI远程调用,都需要用到序列化。
参考文章:
标题:《Java对象序列化全面总结》作者:dashuai 链接:https://www.cnblogs.com/kubixuesheng/p/10350523.html
5. 反射机制的优缺点?
静态编译:编译时确定类型,绑定对象。动态编译:运行时确定类型,绑定对象。
优点:通过反射可以做到动态编译,动态加载,增加代码灵活性。可以做到一般不允许的操作。
缺点:反射是解释性操作,JVM不能对其操作进行优化,性能较低。安全性较低,不适合一些对安全性有要求的程序。
6. 动态代理是什么?有哪些应用?
动态代理,就是JVM运行时根据内存中加载的Class类创建对象,从而调用代理类方法和属性。
Spring的AOP,RPC框架,Java注解对象获取都使用了动态代理。
7. 怎么实现动态代理?
1)JDK 原生动态代理和 cglib 动态代理。
2)JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。
动态代理参考文章:
标题:《java反射与动态代理的理解》作者:慵懒的书生 链接:https://www.cnblogs.com/jacksontao/p/8552357.html
标题:《java的动态代理机制详解》作者:xiaoluo501395377 链接:https://www.cnblogs.com/xiaoluo501395377/p/3383130.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤