Java基础面试题
1.接口和抽象类的异同点
相同:
1.都不可以创建对象
2.都可以定义抽象方法,并且一定要在子类中重写
不同:
1.定义时关键字不同interface(接口),abstract(抽象类)
2.抽象类中既可以有抽象方法,也可以有普通方法
3.接口中的所有方法都是抽象方法
4.抽象类的方法可以是任意权限,接口中的方法只能是public
5.抽象类只能单继承,接口可以多实现
2.重载(overload)和重写(overwrite)的区别
重写的规则:
子类和父类,子类重写了父类的方法
1.方法名,参数列表必须和父类完全一致
2.返回值类型要么相同,要么子类方法的返回值类型是父类方法返回值类型的子类
3.访问修饰符要么相同,要么子类访问修饰符范围大于父类
4.方法中抛出的异常,要么相同,要么子类方法抛出的异常比父类被重写方法抛出的异常更小或相同
重载的规则(两同一不同)
1.同一个类中
2.方法名相同
3.参数列表不同(个数,类型,顺序)
4.和返回值无关
3.StringBuffer 和 StringBuilder 和 String的区别
String字符串常量不可变,使用字符串拼接时,会开辟新的空间
StringBuffer字符串变量可变,线程安全,字符串拼接直接在字符串后追加
StringBuilder字符串变量可变,线程不安全,字符串拼接直接在字符串后追加
1.执行效率: StringBuilder > StringBuffer > String
2.性能:String是一个常量,是不可变的,所以对于每一次+=赋值,都会创建一个新对象,StringBuilder 和 StringBuffer都是可变的,字符串拼接时调用append方法,在字符串后追加,所以性能较高
3.线程安全:StringBuffer线程安全 StringBuilder线程不安全
4.对于大量的字符串拼接,使用StringBuffer 和 StringBuilder
4.冒泡排序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1