# 特性
# 封装
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法。
# 继承
继承是使用已存在的类的定义作为基础建立类的技术,新的类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
- 子类拥有父类对象的所有属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问的,只是拥有。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
# 接口和抽象类的区别
- 接口的方法默认是
public
,所有方法在接口中不能实现,而抽象类可以有非抽象的方法。 - 接口中除了static、final变量,不能有其它变量,而抽象类中则不一定。
- 一个类可以实现多个接口,但是只能实现一个抽象类。接口自己本身可以通过
extends
关键字扩展多个接口。 - 接口方法默认修饰符是
public
,抽象方法可以有public
、protected
和default
这些修饰符(不能使用private
关键字修饰)
# 重载和重写的区别
重载:发生在同一类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。简单的说,就是多个方法有相同的名字、不同的参数,便产生了重载。
重写:是子类对父类的允许访问的方法的实现过程进行重新编写,发生在子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。如果父类方法访问修饰符为private
则子类不能重写该方法。
# 多态
多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
在Java中可以有两种形式实现多态:继承和接口。
# 构造方法的作用和特性
构造方法的主要作用是完成对类对象的初始化工作。
- 名字与类名相同。
- 没有返回值,但是也不能用
void
声明构造函数。 - 生成类的对象时自动执行,无需调用。
# 面向对象和面向过程的区别
- 面向过程:面向过程比面向对象的性能更高。因为类调用时需要实例化,开销比较大。但是,面向过程没有面向对象易维护、易复用、易拓展。
- 面向对象:易维护、易复用、易拓展。因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活,更加易于维护。
# JVM、JDK和JRE
# JVM
Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。
字节码
在 Java 中,JVM可以理解的代码就叫做
字节码
(即扩展名为.class
的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java程序无须重新编译便可在多种不同操作系统的计算机上运行。
Java程序从源代码到运行的步骤
# JDK和JRE
JDK是Java Development Kit,是Java SDK。它拥有JRE的一切,还有编译器(javac)和工具(例如javadoc)。它能够创建和编译程序。
JRE是Java运行时的环境。它是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机(JVM),Java类库,Java命令等。但它不能用于创建新程序。
# Java和C++的区别
- 都是面向对象的语言,都支持封装、继承和多态
- Java不提供指针来直接访问内存,程序内存会更加安全
- Java的类是单继承的,C++支持多重继承;Java的接口可以多继承
- Java有自动内存管理机制