Java 面试基础知识总结(超详细版)
在 Java 后端开发面试中,基础知识往往是面试官最先考察的部分。很多问题虽然简单,但如果回答不完整,很容易被追问。因此本文系统整理了一些 Java 面试高频基础知识,包括:
-
Java 基础概念
-
面向对象
-
包装类
-
static 关键字
-
抽象类与接口
-
深拷贝与浅拷贝
-
自动装箱与拆箱
帮助大家系统复习 Java 基础。
一、Java 基础概念
1 Java 的三大特性
Java 是一门面向对象语言,具有三大特性:
1)封装(Encapsulation)
封装是指:
将对象的属性和方法封装在类中,并通过访问控制隐藏实现细节。
例如:
class Student{
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
特点:
-
属性一般设置为
private -
通过
getter/setter访问
优点:
-
提高安全性
-
隐藏实现细节
-
提高代码维护性
2)继承(Inheritance)
继承是指:
一个类可以继承另一个类的属性和方法。
class Animal{
public void eat(){
System.out.println("吃东西");
}
}
class Dog extends Animal{
}
特点:
-
使用
extends -
Java 单继承
-
可以多层继承
优点:
-
代码复用
-
提高开发效率
3)多态(Polymorphism)
多态是指:
同一个方法在不同对象上表现出不同的行为。
实现方式:
-
方法重载(编译时多态)
-
方法重写(运行时多态)
示例:
Animal a = new Dog();
a.eat();
多态的条件:
-
继承关系
-
方法重写
-
父类引用指向子类对象
二、Java 包装类(Wrapper Class)
Java 中的基本数据类型不是对象。
但很多场景(如集合)必须使用对象,因此 Java 提供了 包装类。
| 基本类型 | 包装类 |
|---|---|
| int | Integer |
| double | Double |
| float | Float |
| char | Character |
| boolean | Boolean |
| byte | Byte |
| short | Short |
| long | Long |
例如:
Integer num = new Integer(10);
现在通常使用:
Integer num = 10;
三、自动装箱与自动拆箱
Java5 之后提供了自动转换机制。
1 自动装箱(Autoboxing)
基本类型 → 包装类
Integer num = 10;
实际上:
Integer num = Integer.valueOf(10);
2 自动拆箱(Unboxing)
包装类 → 基本类型
Integer num = 10;
int n = num;
实际上:
int n = num.intValue();
3 面试常见问题
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
结果:
true
原因:
Integer 在 -128 到 127 之间会使用 缓存池。
如果:
Integer a = 200;
Integer b = 200;
结果:
false
因为超出了缓存范围。
四、static 关键字
static 表示 静态的、类级别的。
它可以修饰:
-
变量
-
方法
-
代码块
-
内部类
1 static 变量
class Student{
static String school = "清华大学";
}
特点:
-
所有对象共享
-
属于类
访问方式:
Student.school
2 static 方法
class Utils{
public static void print(){
System.out.println("hello");
}
}
调用:
Utils.print();
特点:
-
不依赖对象
-
只能访问 static 成员
3 static 代码块
class Test{
static{
System.out.println("静态代码块执行");
}
}
特点:
-
类加载时执行
-
只执行一次
用途:
-
初始化静态变量
五、抽象类(Abstract Class)
抽象类使用 abstract 修饰。
abstract class Animal{
public abstract void eat();
}
子类必须实现抽象方法:
class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
}
特点:
-
不能实例化
-
可以有普通方法
-
可以有成员变量
-
可以有构造方法
六、接口(Interface)
接口用于定义规范。
interface Fly{
void fly();
}
实现接口:
class Bird implements Fly{
public void fly(){
System.out.println("鸟会飞");
}
}
特点:
-
使用
implements -
可以实现多个接口
七、接口和抽象类的区别
| 对比 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 方法 | 可以有普通方法 | 默认是抽象方法 |
| 成员变量 | 可以有普通变量 | 默认 public static final |
| 继承 | 单继承 | 多实现 |
| 构造方法 | 有 | 没有 |
总结:
抽象类 = 模板
接口 = 规范
八、深拷贝和浅拷贝
对象复制有两种方式:
-
浅拷贝
-
深拷贝
1 浅拷贝(Shallow Copy)
浅拷贝只复制 对象引用。
class Person{
String name;
}
Person p1 = new Person();
Person p2 = p1;
结果:
p1 和 p2 指向同一个对象
2 深拷贝(Deep Copy)
深拷贝会 创建新的对象。
例如:
Person p2 = new Person();
p2.name = p1.name;
或者:
-
clone()
-
序列化
3 区别总结
| 类型 | 复制内容 |
|---|---|
| 浅拷贝 | 复制引用 |
| 深拷贝 | 复制对象 |
九、== 和 equals 的区别
这是 Java 面试必问问题。
==
比较:
-
基本类型 → 值
-
引用类型 → 地址
int a = 10;
int b = 10;
System.out.println(a == b);
结果:
true
equals()
比较:
-
对象内容
例如:
String a = "abc";
String b = "abc";
System.out.println(a.equals(b));
结果:
true
十、String、StringBuilder、StringBuffer 区别
| 类 | 特点 |
|---|---|
| String | 不可变 |
| StringBuilder | 可变、线程不安全 |
| StringBuffer | 可变、线程安全 |
示例:
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append("World");
推荐:
-
单线程 → StringBuilder
-
多线程 → StringBuffer
十一、Java 常见面试题总结
常见问题:
1️⃣ Java 的三大特性是什么
2️⃣ == 和 equals 区别
3️⃣ String 为什么不可变
4️⃣ HashMap 和 HashTable 区别
5️⃣ 抽象类和接口区别
6️⃣ 深拷贝和浅拷贝区别
7️⃣ static 关键字作用
8️⃣ 自动装箱和拆箱
9️⃣ Java 集合体系
🔟 多态实现原理
这些几乎是 Java 面试必问基础题。
更多推荐



所有评论(0)