文章目录
-
- 1. 如何理解OOP面向对象编程
- 2. JVM、JRE、JDK的区别
- 3. 面向对象和面向过程的区别
- 4. 重载与重写的区别
- 5. 接口与抽象类的异同
- 6. 深拷贝与浅拷贝的理解
- 7. "=="和equals的区别
- 8. sleep和wait的异同
- 9. 什么是自动拆装箱?int和Integer有什么区别?
- 10. 序列化和反序列化
- 11. Java中的修饰词有哪些
- 12. String能被继承吗?为什么用final修饰?
- 13. StringBuffer 和 StringBuilder 的区别
- 14. final, finally, finalize的区别
- 15. Object类中有哪些方法?
- 16. Java异常处理机制
- 17. throw和throws的区别
1. 如何理解OOP面向对象编程
在面向对象编程中,程序被组织成一系列互相关联和相互作用的对象,每个对象都有自己的属性和方法。对象之间通过消息传递的方式进行交互,通过定义类和实例化对象来创建具体的对象。
面向对象是一种编程思想,也是一种编程模式,将现实中的实物抽象成对象,因此,也有人将抽象定义为面向对象编程的第四大特点。
面向对象编程的主要特点包括:
- 封装
封装是将数据和操作数据的方法封装在一个对象内部,隐藏内部实现细节,只对外提供公共接口。这样可以保护数据的完整性和安全性,并且提高代码的模块化和可维护性。 - 继承
继承允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类代码,并且可以通过过添加新的特性或者修改已有特性来扩展或定制父类的功能。 - 多态
多态是指同一个方法可以根据不同的对象类型表现出不同的行为。多态使得代码更加灵活,可以处理不同类型的对象,并且可以在运行时多态确定对象的实际类型。
通过面向对象编程,开发人员可以更好地模拟现实世界的问题领域,将复杂的问题分解为简单的对象,并通过对象之间的交互来解决问题。面向对象编程提供了一种结构化和模块化的方法,是的代码更易于维护。重用和扩展。
常见的面向对象编程语言包括Java,C++,Python等。
2. JVM、JRE、JDK的区别
- JVM:java虚拟机,负责将Java字节码解释编程成特定平台的机器码来执行。
- JRE:java运行环境,由JVM和运行java程序所必需的内库等组成。
- JDK:java开发工具包。由JRE和开发java程序所需的命令等组成。
3. 面向对象和面向过程的区别
面向对象编程(OOP) 和面向过程编程是两种不同的编程范式。主要区别是:
- 核心思想
- 面向对象编程:将程序中的数据和方法组织在一起,形成”对象“,并通过对象之间的互相通信与协作来完成任务,强调的是数据和行为的封装。
- 面向过程编程:将问题划分为一系列的步骤或过程,通过调用函数来依次执行这些步骤来解决问题。强调的是算法和逻辑的执行流程。
- 代码结构
- 面向对象编程:程序被看做一组对象的集合,每个对象包含数据和方法,对象之间通过消息传递进行通信,可以实现数据的封装、继承和多态。
- 面向过程编程:程序被看做一系列的函数或者过程的集合,数据和函数是分离的,函数通过参数传递数据进行处理。
- 重用性
- 面向对象编程:支持代码的重用行,通过类和对象的继承关系可以实现代码的复用,同时也能提高代码的可维护性和扩展性。
- 面向过程编程:代码重用主要依靠函数的复用,缺乏类和对象的概念,因此在复杂项目中可能会导致代码的冗余和难以维护。
- 维护性
- 面向对象编程:由于具有良好的封装性和模块化特性,使得程序结构清晰,易于维护和修改。
- 面向过程编程:较为直接的线性执行方式,可能随着程序规模的增大而变得难以维护。
- 使用场景
- 面向对象编程:适用于大型,复杂的软件系统开发,能更高的应对需求变化和扩展。
- 面向过程编程:适用于简单,小规模的程序开发,以及对性能要求较高的场景。
总的来说,面向对象编程更加注重数据的封装和抽象,适合于大型软件系统的开发。而面向过程编程更加注重算法和流程的执行,适合于较为简单和直接的问题求解。
4. 重载与重写的区别
-
重载(overload)指的是在同一个类中,可以有多个方法拥有相同的名称,但是他们的参数列表不同,编译器会区分这些方法,并且根据调用时传入的数据类型和数量来确定具体调用哪一个方法。重载能够使同一个方法名进行不同的操作,提高了代码的灵活性和可读性。
-
重写(override)指的是子类重新定义了父类中已有的方法,使得子类的方法覆盖了父类中的方法。在重写中,方法名、返回类型和参数列表必须与父类中的方法完全相同,这样才能实现方法的重写。重写允许子类根据自身的需要对继承而来的方法进行修改,实现了多态性的特性。
5. 接口与抽象类的异同
- 相同点
- 都是用于实现多态性和代码重用的机制。
- 都可以包含抽象方法,需要子类提供具体实现。
- 都不能被实例化,只能被其它类继承或实现。
- 不同点
- 定义方式不同
- 接口只能包含抽象方法、常量和默认方法,不能包含字段和构造函数。
- 抽象类可以包含抽象方法、具体方法、字段和构造函数。
- 继承方式不同
- 一个类可以实现多个接口,但只能继承一个抽象类。
- 接口之间可以相互继承,形成接口的继承链,而抽象类只能单继承。
- 目的不同
- 接口用于定义类之间的契约,描述了类应该具有的行为,强调接口的实现。
- 抽象类用于捕捉子类之间的通用行为,提供一种模板或者结构,强调代码的复用性和扩展性。
- 设计思想不同
- 接口强调“做什么”而不关心“怎么做”,侧重于约定规范和行为。