image-20240420163459407

Java基础

接口和抽象类的共同点和区别

  1. 接口和抽象类都是不能被实例化的
  2. 接口和抽象类都可以被继承
  3. 接口和抽象类都可以包含抽象方法,抽象方法只有方法的声明,没有方法体
  4. 都可以有默认的方法实现

区别:

  1. 接口中的方法默认是public,抽象类中的方法可以是public、protected、default
  2. 接口中的变量默认是public static final,抽象类中的变量可以是public、protected、default
  3. 接口中不能有静态代码块,抽象类中可以有静态代码块
  4. 一个类只能继承一个抽象类,但是可以实现多个接口
  5. 接口中不能有构造方法,抽象类中可以有构造方法
  6. 接口中不能有静态方法,抽象类中可以有静态方法
  7. 接口主要用于定义类型,抽象类主要用于代码复用

字符串对象通过”+”连接的效率问题

字符串对象通过”+”连接,实际上是通过StringBuilder的append方法实现的,所以效率比较高,但是如果在循环中使用”+”连接字符串,会创建很多StringBuilder对象,效率较低。

如果直接使用StringBuilder对象的append方法,效率会更高。

String s1 = new String(“abc”);和String s2 = “abc”;的区别

  1. 如果字符串常量池中没有”abc”的引用,则会在堆上创建两个字符串对象,其中一个字符串对象的引用会存放在字符串常量池中
  2. 如果字符串常量池中已经有”abc”,则只会在堆中创建一个”abc”对象,s1指向堆中的”abc”对象

String.intern()方法的作用

String.intern()方法会在字符串常量池中查找是否有相同的字符串,如果有,则返回字符串常量池中的引用,如果没有,则将字符串对象的引用存放在字符串常量池中。

Throwable

Throwable是Java中所有错误和异常的超类,它有两个子类:Error和Exception。

Error

Error是Java虚拟机无法解决的严重问题,比如内存溢出、虚拟机错误等,一般不需要捕获。

  1. OutOfMemoryError:内存溢出
  2. StackOverflowError:栈溢出
  3. NoClassDefFoundError:类定义错误
  4. UnsatisfiedLinkError:本地方法找不到
  5. VirtualMachineError:虚拟机错误

Exception

Exception是程序运行过程中可能出现的异常,分为两种:

  1. Checked Exception:编译器会检查是否处理了这种异常,比如IOException、SQLException
  2. Unchecked Exception:编译器不会检查是否处理了这种异常,比如NullPointerException、ArrayIndexOutOfBoundsException
    2.1 RuntimeException:运行时异常,比如NullPointerException、ArrayIndexOutOfBoundsExceptionIllegalArgumentException, ArithmeticException, ClassCastException

当try语句和finally语句中都有return语句时,会先执行finally语句中的return语句

当finally之前虚拟机退出时,finally语句中的代码不会执行

try-with-resources

try-with-resources是Java7中引入的一个新特性,用于自动关闭资源,比如文件、网络连接等。

try (BufferedReader br = new BufferedReader
(new FileReader(path))) {
return br.readLine();
}