1.String、StringBuffer、StringBuilder三者之间的区别(必会):
String:字符串,常量。使用 final 关键字修饰字符数组来保存字符串
StringBuffer:拼接字符串,对象可变,对方法加了同步锁,线程安全高,效率低。
StringBuilder:拼接字符串,对象可变,没有对方法加同步锁,线程安全低,效率高。
小结:
(1)如果要操作少量的数据用 String。
(2)多线程操作字符串缓冲区下操作大量数据用 StringBuffer;
(3)单线程操作字符串缓冲区下操作大量数据用 StringBuilder。

2.接口和抽象类的区别是什么?(必会):
接口:接口使用 implements来实现, 没有构造器和方法体,只有抽象方法,类可以实现多个接口。默认使用public修饰。

抽象类:抽象类使用extends来继承,有构造器、抽象方法,非抽象方法可以有方法体。抽象类只能继承一个,可以是任意访问的修饰符。

3.Java中的继承是单继承还是多继承:
Java 中既有单继承也有多继承。类是单继承,可以实现多个接口。接口是多继承,可以同时继承多个接口。

4.Static关键字有什么作用:

1.Static可以修饰内部类、方法、变量、代码块
修饰类:静态类
修饰方法:静态方法,可以通过类名去访问
修饰成员变量:通过类名去访问,且具体实现类共享这个变量
修饰代码块:static代码块在类首次被加载时调用

2.Static修饰的方法是静态方法,同一个类中,静态方法只能访问静态修饰的成员(静态只能访问静态),静态方法不能被重写,直接使用类名来调用。在static方法中没有this或者super关键字。

3.Static修饰变量是静态变量,修饰的变量在内存中只有一份,可以被这个类的所有对象直接共享访问。

4.Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行

final在java中的作用,有哪些用法:

  1. 修饰的类:不可以被继承。
  2. 修饰的方法:不可以被重写。
  3. 修饰的变量:不可以再次被赋值。

final修饰基本类型,表示值不可改变。
修饰引用类型,表示地址值不可变但内容可以改变。

  1. 修饰的方法,JVM会尝试将其内联,以提高运行效率
  2. 修饰的常量,在编译阶段会存入常量池中.除此之外,编译器对final域要遵守的两个重排序规则更好:
    在构造函数内对一个ifinal域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
    初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序