版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面向对象与字符串高频面试题及详细答案(实战版)第一部分:Java面向对象编程面试题1、谈谈你对Java面向对象四大特性的理解?Java面向对象核心四大特性为封装、继承、多态、抽象,都是日常开发高频用到的核心特性,并非理论概念,实际落地场景如下:封装:核心是隐藏内部实现细节,仅对外暴露访问方式。开发中通过private修饰成员变量,提供get/set方法访问,避免外部直接修改成员变量导致数据混乱。比如用户实体类的手机号、密码字段私有化,通过方法做参数校验、数据脱敏,保证数据安全性和代码稳定性。继承:基于已有类创建新类,实现代码复用和功能扩展。子类可以继承父类的非私有属性和方法,不用重复编写通用代码。比如开发中所有实体类统一继承BaseEntity,复用创建时间、修改时间、创建人等通用字段。Java是单继承机制,一个子类只能有一个直接父类,避免多继承带来的代码冗余和逻辑冲突。多态:同一行为在不同子类中有不同实现,核心是父类引用指向子类对象。实现方式分为方法重写和方法重载,编译看父类、运行看子类。日常接口调用、Spring依赖注入都是多态的落地,能极大提升代码扩展性,新增子类无需修改原有核心代码,符合开闭原则。抽象:抽取事物核心共性,忽略次要细节,定义规范标准。通过抽象类和接口实现,抽象类可以有普通方法和成员变量,接口只定义方法规范(JDK8前)。抽象的作用是统一子类行为标准,强制子类实现指定方法,保证代码架构统一性。2、重载和重写的区别?(高频必问)这是项目开发中最常用的两个语法,核心区别体现在定义、权限、参数、编译运行机制上,具体差异如下:方法重载(Overload):同一个类中,多个方法名相同,参数列表不同(参数个数、类型、顺序不同)。核心特点:与方法返回值、访问修饰符无关编译期绑定,静态多态作用:同一个功能适配不同参数场景,比如System.out.println()多个重载方法方法重写(Override):子类对父类已有的非私有、非final、非静态方法进行重新实现。核心特点:方法名、参数列表、返回值必须和父类一致(协变返回除外)访问权限不能比父类更严格(父类protected,子类不能是private)运行期绑定,动态多态作用:子类按需改写父类通用逻辑,实现个性化功能3、抽象类和接口的区别?很多新手容易混淆两者,实际开发中分工明确,核心区别如下:继承方式:抽象类用extends,只能单继承;接口用implements,可以多实现成员变量:抽象类可以有普通成员变量、常量;接口中默认是publicstaticfinal常量,不能定义普通变量方法定义:抽象类可以有抽象方法、普通实例方法、静态方法;JDK8之前接口只有抽象方法,JDK8新增默认方法、静态方法,JDK9新增私有方法构造方法:抽象类有构造方法,用于子类初始化父类成员;接口没有构造方法,无法实例化设计理念:抽象类是“是什么”,体现父子类的从属关系;接口是“能做什么”,体现行为能力,无关继承关系实战用法:通用模板、复用代码用抽象类;定义行为规范、解耦扩展用接口。4、final、finally、finalize的区别?三者名称相近、完全无关,是面试基础高频坑题:final:是修饰符,用于约束变量、方法、类。final修饰的变量不可二次赋值;修饰的方法不能被重写;修饰的类不能被继承。日常开发中常用final定义常量、防止方法重写、保证对象引用不可变。finally:是异常处理关键字,搭配try-catch使用。无论代码正常执行还是抛出异常,finally中的代码一定会执行(除了System.exit(0)、断电等极端情况)。核心作用是释放资源,比如关闭流、数据库连接、锁释放。finalize:是Object类中的废弃方法,JDK9之后已废弃。原本作用是GC回收对象前触发,用于手动清理资源,但执行时机不确定、无法保证调用,生产项目中绝对不会使用。5、==和equals()的区别?核心区别:比较的内容不同,适用场景不同。==:是运算符,可用于基本数据类型和引用类型。基本类型比较数值是否相等;引用类型比较内存地址是否相同,也就是判断是否是同一个对象。equals():是Object类的方法,仅用于引用类型。Object原生的equals方法底层就是==,比较地址;但String、Integer等包装类重写了equals方法,重写后比较对象内容是否相等。实战总结:基本类型比较用==;字符串、对象内容比较必须用equals,空对象需先判空避免空指针。6、Java中的异常体系有哪些?受检异常和非受检异常区别?Java异常顶层父类是Throwable,分为Error和Exception两大类:Error:系统级严重错误,比如OOM内存溢出、栈溢出StackOverflowError,程序无法捕获处理,只能终止程序。Exception:代码可处理的异常,分为受检异常和非受检异常。受检异常(编译期异常):继承自Exception、非RuntimeException。编译阶段必须处理,要么try-catch捕获,要么throws抛出,否则编译报错。比如IO异常、SQL异常、文件不存在异常。非受检异常(运行时异常):继承自RuntimeException。编译不报错,运行程序才会抛出,可处理可不处理。大多是代码逻辑问题导致,比如空指针、数组越界、类型转换异常。第二部分:Java字符串高频面试题1、String、StringBuilder、StringBuffer的区别?(必考)三者核心差异在可变性、线程安全、性能,日常开发按需选择:String:不可变字符串,底层是final修饰的char数组(JDK9+为byte数组)。每次字符串拼接、修改都会生成新对象,原对象不会改变。线程安全,但频繁拼接字符串会产生大量无用对象,浪费内存,性能最差。适合字符串固定、极少修改的场景。StringBuffer:可变字符串,所有方法都加了synchronized锁,线程安全。多线程环境下操作不会出现并发问题,但锁会带来性能损耗,拼接效率低于StringBuilder。适合多线程字符串拼接场景。StringBuilder:可变字符串,无锁、线程不安全。单线程下拼接性能最优,是日常开发最常用的字符串拼接工具。仅适合单线程环境,多线程下会出现数据覆盖、结果错乱问题。实战口诀:常量固定用String,单线程拼接用StringBuilder,多线程拼接用StringBuffer。2、为什么String是不可变的?不可变的好处是什么?不可变原因:String底层存储字符的数组被final修饰,且类被final修饰无法被继承,内部没有提供任何修改数组内容的方法,一旦初始化赋值,内容无法更改。所谓的字符串替换、拼接,都是创建新对象,原对象保持不变。不可变的核心优势:线程安全:对象不可修改,多线程并发访问不会出现线程安全问题字符串常量池复用:相同字符串可以复用常量池对象,节省内存空间作为HashMap键安全:不可变保证哈希值固定,不会出现键值查找失效问题避免数据篡改:网络请求、配置参数等字符串数据更稳定安全3、String常量池的原理?newString("abc")创建几个对象?字符串常量池原理:JVM为了节省内存,开辟的一块专门存储字符串常量的空间。创建字符串时,会先去常量池查找,存在则直接复用对象,不存在则在常量池创建新对象。JDK6常量池在方法区,JDK7及之后移到堆内存。newString("abc")创建对象数量:分两种情况:常量池中无“abc”:创建2个对象,一个是常量池中的字符串对象,一个是堆内存中的String对象常量池已有“abc”:创建1个对象,仅在堆内存创建新的String对象,复用常量池对象补充:Strings="abc";只会在常量池创建1个对象,效率远高于new方式。4、Strings1="a"+"b"和Strings2=newString("ab")有什么区别?1、Strings1="a"+"b":编译期优化,编译器会直接将常量拼接为"ab",最终只在常量池生成一个"ab"对象,s1指向常量池地址,效率极高。2、Strings2=newString("ab"):会强制在堆中创建新对象,s2指向堆内存地址,同时依赖常量池的"ab"常量。因此s1==s2结果为false,因为一个指向常量池,一个指向堆内存,地址不同。5、String的intern()方法作用?intern()是String的本地方法,核心作用是主动将字符串放入常量池并返回常量池对象引用。执行逻辑:调用intern()时,先判断常量池是否存在当前字符串内容,存在则直接返回常量池对象;不存在则将当前字符串存入常量池,再返回引用。实战场景:处理大量重复字符串数据时,用intern()可以复用常量池对象,大幅降低内存占用,解决内存溢出问题。6、为什么不建议用String做大量字符串拼接?因为String不可变,每一次+拼接,底层都会新建String对象,丢弃旧对象。比如循环1000次字符串拼接,会产生1000个临时对象,大量占用堆内存,触发频繁GC,严重降低程序性能。而StringBuilder、StringBuffer是可变数组,拼接时直接修改原数组内容,不会生成新对象,循环拼接场景性能提升几十倍。第三部分:综合压轴面试题1、谈谈Java值传递和引用传递?Java是值传递还是引用传递?Java只有值传递,没有引用传递,这是高频易错点。基本数据类型传参:传递的是变量数值副本,方法内修改参数不会影响原变量。引用数据类型传参:传递的是对象地址的副本,并非对象本身。方法内可以通过地址修改对象内部属性,但无法修改原变量的引用指向。举例:方法内给参数重新赋值新对象,原对象不会改变;但修
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上半年教资幼儿园综合素质真题及答案解析
- 2025消防安全知识培训试题及答案
- 2025医疗器械法律法规相关知识培训试题+答案
- 2025中医助理医师考试病例分析试题及答案
- 2025中小学生航空航天科普知识竞赛试题库及答案
- 2026年电子评标能力模拟题(含答案)
- 2026年人工智能培训师试题及答案
- 高中英语教资面试听力专项真题演练题库及解析
- 医疗服务模式创新与患者体验提升
- 西南农大研究生就业分析
- 市政道路工程监理实施细则
- 2026 年妇科宫腔镜手术围手术期护理课件
- 2026年北京市中考英语试卷真题及答案详解(精校打印版)
- 2026年家禽屠宰加工工协同作业考核试卷及答案
- 社会体育导论 课件全套 0社会体育导论课程介绍-10社会体育指导实践
- 2026年秋人美版(新教材)小学美术四年级上册(全册)教学设计(附目录p153)
- 2026年全科医生转岗培训考试(理论考核)题库及答案(辽宁省)
- 2026年中级消防设施操作员(监控方向)考试题库(附答案)
- 2026年平安岗前培训测试题及答案
- 电梯使用维护安全管理培训课件
- 高级职称晋升面审消化内科(副)主任医师答辩专业技术问答题
评论
0/150
提交评论