Java面试题小记
什么是面向对象?谈谈你对面向对象的理解
对比面向过程,是两种不同的处理问题角度
面向过程更注重解决事情的每一个步骤及顺序(直接高效),面向对象更注重解决事情的参与者有哪些,各自负责什么内容(易于复用、扩展和维护)
面向对象的三大特性
封装
隐藏类的属性及部分实现细节,调用者不需要关心内部实现
继承
类似于“狗 是 动物” 可以理解为“狗类”继承了“动物类”,继承又涉及到方法的重写(返回值类型、方法名、参数类型与个数需要与父类完全一致),子类重写父类中的方法,子类中的方法权限要大于等于父类中的方法,抛出的异常范围和返回值范围要小于等于父类中的方法。
重写与重载的区别
重写发生在继承时,子类对父类中已经存在的方法进行区别化(个性化)的修改
重载发生在同一个类中,在同一个类中处理不同数据的多个相同方法名的多态手段
多态
多态就是对象的多种形态。继承是多态的基础
- 引用多态
- 方法多态
JDK、JRE、JVM区别与联系
JDK包含JRE,JRE包含JVM,如果只是为了运行java程序的话安装JRE就够了,但是如果是为了开发java程序则需要安装jdk(java development kit),
String、StringBuffer、StringBuilder
String 是final 修饰的,不可变,每次操作都会产生一个新的对象
StringBuffer和StringBuilder是在原对象上操作
StringBuffer是线程安全的,方法是synchronized修饰的
StringBuilder是线程不安全的
性能:StringBuilder>StringBuffer>String
接口和抽象类的区别
抽象类
被sbstract修饰的类为抽象类:
- 抽象类不能被实例化只能被继承
- 包含抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法
- 抽象类中的抽象方法的修饰符只能为public或者protected,默认为public
- 一个子类继承一个父类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类
- 抽象类可以包含属性、方法、构造方法,但是构造方法不能用来实例化,主要用途是被子类调用
接口
Java中接口使用Interface关键字修饰
- 接口可以包含变量、方法;变量被隐式指定为public static final,方法被隐式指定为public abstract(JDK1.8之前)
- 接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题(这个问题也可用匿名内部类的方式解决);
- 一个类可以实现多个接口
- JDK1.8接口新特性
- 允许给接口添加非抽象的方法实现,但唏嘘使用default修饰;定义了default的方法可以不被实现子类所实现,担只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法
- 允许使用static关键字修饰一个方法,并提供实现,成为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)
List和Set
List:
有序,按照对象进入的顺序保存对象,可重复,允许多个Null元素对象,可以使用iterator取出所有元素,再逐一遍历,还可以通过get(int index)获取指定下标的元素
Set:
无序,不可重复,最多允许有一个Null元素对象,取元素时只能用iterator接口取得所有元素,再逐一遍历各个元素