Skip to content

Java 基础面试题

1. 面向对象三大特性是什么?分别解释一下

封装:将对象的属性和行为封装起来,隐藏内部实现细节,只暴露必要的接口。通过 private 修饰属性 + public getter/setter 实现。

继承:子类继承父类的属性和方法,实现代码复用。Java 是单继承,但可以通过接口实现多继承效果。

多态:同一个方法调用,不同对象表现出不同行为。分为编译时多态(方法重载)和运行时多态(方法重写)。

2. == 和 equals 的区别?

  • ==:比较基本类型时比较值,比较引用类型时比较内存地址
  • equals:Object 类中默认比较内存地址,但 String、Integer 等重写了 equals 方法,比较的是内容
java
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);       // false
System.out.println(s1.equals(s2));  // true

3. String、StringBuilder、StringBuffer 的区别?

特性StringStringBuilderStringBuffer
可变性不可变可变可变
线程安全安全不安全安全(synchronized)
性能拼接时创建新对象高效较低

4. 异常体系是怎样的?

  • Throwable 是所有异常的根类
    • Error:程序无法处理的严重错误(OOM、StackOverflow)
    • Exception:程序可以处理的异常
      • RuntimeException:运行时异常,无需显式处理(NPE、IndexOutOfBounds)
      • Checked Exception:编译时异常,必须显式处理(IOException、SQLException)

5. 反射是什么?有什么优缺点?

反射:在运行时动态获取类的信息并操作类的方法和属性。

优点

  • 运行时动态创建对象,灵活性高
  • 框架的核心机制(Spring、MyBatis)

缺点

  • 性能开销大
  • 破坏封装性,不安全
  • 编译期无法检查类型安全

6. 泛型中 extends 和 super 的区别?

  • <? extends T>:上界通配符,只能读取不能写入(生产者)
  • <? super T>:下界通配符,只能写入不能读取(消费者)

PECS 原则:Producer Extends, Consumer Super。