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)); // true3. String、StringBuilder、StringBuffer 的区别?
| 特性 | String | StringBuilder | StringBuffer |
|---|---|---|---|
| 可变性 | 不可变 | 可变 | 可变 |
| 线程安全 | 安全 | 不安全 | 安全(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。