什么是面向过程?什么是面向对象?
面向过程就是将问题分解成一个一个步骤,逐个执行。
面向对象就是将问题事务分解成各个对象,由步骤的直接执行者转为对对象的方法的调用者。

== 和 equals 的区别是什么?
1)对于==,比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,两个对象的hashCode()相等只能保证两个对象散列表的键值对的哈希值相等,但不能推论出键值对相等,当equals()未被重写时表示的是两个对象地址完全相等则返回true。反之若未被重写的equals()返回true,则hashCode()一定相等,若被重写了,则不一定。通常重写equals()方法的同时,也要重写hashCode()方法。

final 在 java 中有什么作用?
(1)修饰变量:则变量无法被二次赋值,修饰基本类型时,赋值后就无法改变变量的值;修饰引用类型时,指向的对象无法被改变,所指对象的内容仍然能改变。final修饰的字面量可以在编译之前获取内容。final修饰的形参在方法内也是不可变的。
(2)修饰方法:则方法无法被子类重写,若父类中的private修饰的方法同时被指定为final,则该方法不会被子类继承,此时在子类中定义重名方法将不会产生final与重写之间的矛盾,相当于在子类中重新定义了新的方法。
(3)修饰类:则该类无法被子类继承,类中所有的成员方法都会被隐式指定为final

抽象类必须要有抽象方法吗?
不一定,抽象类中可以没有抽象方法,但有抽象方法的类一定要声明为抽象类。

普通类和抽象类的区别
1.抽象类不能被实例化。
2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
4.含有抽象方法的类必须声明为抽象类
5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。

抽象类能使用 final 修饰吗?
不可以,抽象类只有在被继承时才能使用,而被final修饰的类无法被继承。

接口和抽象类有什么区别?
(1)抽象类可以有构造方法,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含静态方法,接口中不能包含静态方法
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承
(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
(7)抽象类是一种子类的模板,接口是一种标准。
面向对象的三大特性分别是什么?
封装、继承、多态

面向对象的五大基本原则?
单一职责原则(SRP):一个类应该仅有一个引起它变化的原因。
开放封闭原则(OCP):对扩展开放,对更改封闭。
里氏替换原则(LSP):子类可以替换父类并且出现在任何父类能够出现的地方
依赖倒置原则(DIP):使高层模块不在依赖低层模块
接口隔离原则(ISP):使用多个专门的接口比使用单个接口好得多

类与类之间的关系有多少种?分别代表什么意思?
1.泛化(继承):一个类是另一个类的扩展类,A is a B,Student是一种Person,使用extends关键字
2.依赖:在A的某个方法中B类作为参数被使用,这种关系是短暂临时的。
3.关联:B作为A的类属性(类变量或成员变量)的形式出现在A中,这种关系比依赖强,可以是单向也可以是双向的
4.聚合:代码层面和关联没有区别,只能从语义层面区分,A和B是整体与部分的关系,可以各自有各自的生命周期,一个B也可以被多个A共享,类似公司和员工,电脑和CPU的关系
5.组合:代码层面和关联没有区别,只能从语义层面区分,A和B是整体与部分的关系,关联比聚合更强,整体的生命周期结束必然导致部分的生命周期结束,单个B无法被多个A共享,类似人和人的器官

什么是值传递?什么是引用传递?
值传递指的是方法中的基本类型作为形参,值不改变;引用传递是引用类型做形参,所指向的地址不变,值可以改变。

说说重载和重写的区别?
完全不同的两个概念,重载发生在同一个类里,指两个方法的方法名相同,参数列表不同的情况
重写发生在父类和子类之间,方法名和参数列表完全相同,子类覆盖父类中的同名方法
两者都是多态的不同表现形式

说说static的用法?
1修饰类变量,不需要实例化对象就可以使用,由类名访问,类的所有对象共享
2.修饰方法,静态方法,通过类名调用,在静态方法中不能调用非静态成员
3.修饰代码块,静态代码块,只在类加载时执行一次
4.修饰导入的类,使用类中静态成员时无需用类名调用

谈谈final、finally、 finalize有什么不同?
1。final修饰的类,不可被继承,修饰的方法不可被重写,修饰的变量不可多次赋值。通过final能够得到性能上的优化,但是不明显,如果大量使用可能会干扰代码,不能表达出本来具有的含义。故不使用。匿名内部类,访问局部变量要求传入的参数,必须是final是要保证数据一致性问题。
2。finally。代码中总是会执行的代码段。除了退出虚拟机外。
3。finalize。在虚拟机回收改对象前进行调用。此种方式不可取。因为java虚拟机不知道在什么时候才对对象进行回收。
final修饰类,变量,方法等;目的是不可变,这样做使得安全、提高性能

哪个类中包含Clone()方法?
Cloneable是一个标志性接口,不包含任何方法,clone()方法是在Object类中定义的本地方法,由C语言实现