- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Java编程面试题库及详解
简单来说,传递对象引用时,传递的是引用的拷贝,使得形参和实参都指向同一个对象。因此可以修改对象的内部状态,但无法通过形参让实参指向一个新的对象。
1.3String、StringBuffer和StringBuilder的区别?
这三个类都用于处理字符串,但在可变性和线程安全性上有显著区别:
*String:
*不可变(Immutable):字符串一旦创建,其内容就不能被修改。任何对String对象的修改(如拼接、替换)都会创建一个新的String对象。
*线程安全:由于其不可变性,多线程环境下是安全的。
*适用场景:字符串内容不经常修改的场景,如常量定义、少量字符串拼接(编译器可能优化为StringBuilder)。
*StringBuffer:
*可变(Mutable):其内部有一个字符数组用于存储字符串内容,可以通过append、insert等方法修改内容,而不会创建新的对象(在容量不足时会扩容)。
*线程安全:其大部分方法都被`synchronized`关键字修饰,因此支持多线程环境下的安全操作。
*性能:由于线程安全的开销,其执行效率相对较低。
*适用场景:多线程环境下,需要频繁进行字符串修改操作的场景。
*StringBuilder:
*可变(Mutable):与StringBuffer类似,内部也是可变字符数组,提供了几乎相同的API。
*非线程安全:没有使用`synchronized`修饰方法,因此在多线程环境下使用可能会有线程安全问题。
*性能:由于避免了同步开销,其执行效率通常比StringBuffer高。
*适用场景:单线程环境下,需要频繁进行字符串修改操作的场景,这是日常开发中推荐的选择。
二、面向对象编程(OOP)
2.1什么是封装、继承和多态?它们在Java中的实现方式?
封装、继承、多态是面向对象编程的三大核心特性。
*封装(Encapsulation):
*概念:将对象的状态(属性)和行为(方法)捆绑在一起,并对外部访问进行控制,隐藏对象的内部实现细节,只暴露必要的接口。
*Java实现:
*使用访问修饰符(private,default(package-private),protected,public)来控制类成员的可见性。通常将属性设为private,通过public的getter和setter方法来访问和修改属性,以保证数据的安全性和一致性。
*例如,一个`Person`类可以将`age`属性设为private,并提供`getAge()`和`setAge(intage)`方法,在setter中可以加入年龄范围的校验。
*继承(Inheritance):
*概念:允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法,从而实现代码复用和扩展。子类可以拥有父类的非私有成员,并可以添加新的属性和方法,或重写父类的方法。
*Java实现:
*使用`extends`关键字。Java是单继承的,即一个类只能直接继承一个父类,但可以通过多层继承形成继承链。
*`Object`类是所有Java类的根父类。
*子类通过`super`关键字可以调用父类的构造方法、属性和方法。
*访问修饰符`protected`允许子类访问父类的成员。
*多态(Polymorphism):
*概念:指允许不同类的对象对同一消息做出响应。即同一接口,多种实现。多态性提高了代码的灵活性和可扩展性。
*Java实现:
*编译时多态(静态多态):主要通过方法重载(Overloading)实现。指在同一个类中,方法名相同,但参数列表(参数类型、个数、顺序)不同,编译器根据方法签名绑定调用。
*运行时多态(动态多态):主要通过方法重写(Overriding)和向上转型实现。
*方法重写:子类重写父类的方法(方法名、参数列表、返回类型必须相同,子类方法的访问权限不能低于父类)。
*向上转型:将子类对象赋值给父类引用变量。
*当通过父类引用调用一个方法时,JVM会在运行时根据引用变量所指向的实际对象类型来确定调用哪个类的方法,这就是动态绑定。
*例如,`Animal`类有`makeSound()`方法,`Dog`和`Cat`类继承自`Animal`并分别重写`makeSound()`。`Animalanimal=newDog();animal.makeSound();`运行时会调用`Dog`的`makeSound()`。
2.2接口(Interface)和抽象类
您可能关注的文档
最近下载
- 津津有味·读经典Level3《金银岛》译文和答案.docx
- SHT3503-2017石油化工建设工程项目交工技术文件规定.pdf VIP
- 九年级下学期班主任工作总结_九年级下学期的班主任工作总结范文.docx VIP
- 九年级下学期班主任工作计划--班主任工作计划.docx VIP
- 九年级班主任上学期工作计划 九年级上学期班主任学期工作计划(通用6篇).docx VIP
- 九年级上学期班主任工作总结.docx VIP
- 八年级下学期班主任工作总结-班主任工作总结.doc VIP
- 七年级上《第2章整式的加减》测试题及答案(数学试卷新课标人教版七年级上单元试题).doc VIP
- 八年级下学期班主任工作计划-班主任工作计划.doc VIP
- 班主任上学期工作计划:八年级上学期班主任工作计划.doc VIP
原创力文档


文档评论(0)