在 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();

多态的条件:

  1. 继承关系

  2. 方法重写

  3. 父类引用指向子类对象


二、Java 包装类(Wrapper Class)

Java 中的基本数据类型不是对象。

但很多场景(如集合)必须使用对象,因此 Java 提供了 包装类

基本类型包装类
intInteger
doubleDouble
floatFloat
charCharacter
booleanBoolean
byteByte
shortShort
longLong

例如:

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 classinterface
方法可以有普通方法默认是抽象方法
成员变量可以有普通变量默认 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 面试必问基础题

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐