在 Java 面试中,基础知识是几乎每家公司都会考察的重点。本篇文章系统整理了 Java 基础核心面试知识点,包括 Java 概念、数据类型、面向对象、Object 类、异常、I/O、反射、集合等内容,适合作为面试复习资料。


一、Java 基础概念

1 Java 的优势和劣势

优势

1️⃣ 跨平台性(Write Once Run Anywhere)

Java 通过 JVM 实现跨平台,一次编写可以在多个平台运行。

2️⃣ 面向对象

Java 完全面向对象,支持封装、继承、多态。

3️⃣ 生态系统强大

Java 拥有非常完善的生态:

  • Spring

  • SpringBoot

  • MyBatis

  • Netty

  • Dubbo

4️⃣ 自动内存管理

Java 具有 垃圾回收机制(GC),可以自动回收不再使用的对象。

5️⃣ 多线程支持

Java 内置多线程机制,方便开发高并发程序。

6️⃣ 安全性高

Java 提供安全模型,例如:

  • 类加载机制

  • 沙箱机制


劣势

1️⃣ 性能低于原生语言

例如:

  • C

  • C++

Java 需要 JVM 运行,因此性能略低。

2️⃣ 启动速度慢

例如微服务场景中:

  • Java 启动慢

  • Go 启动快

3️⃣ 语法相对繁琐

Java 代码量相对较多。


二、Java 为什么可以跨平台

Java 跨平台的核心是 JVM(Java Virtual Machine)

Java 程序执行流程:

Java源码 (.java)
      ↓
Java编译器
      ↓
字节码 (.class)
      ↓
JVM
      ↓
操作系统机器码

不同操作系统安装不同的 JVM,就可以运行相同的 Java 字节码。

因此实现:

一次编写,到处运行。


三、编译型语言 vs 解释型语言

编译型语言

程序运行前进行编译:

源代码 → 编译 → 机器码

特点:

  • 执行速度快

  • 跨平台性差

例如:

  • C

  • C++


解释型语言

运行时逐行解释执行:

源代码 → 解释器 → 执行

特点:

  • 跨平台好

  • 执行速度慢

例如:

  • Python

  • JavaScript


四、Java 数据类型

Java 数据类型分为两类:

1 基本数据类型

类型数据类型
整数byte short int long
浮点float double
字符char
布尔boolean

2 引用数据类型

包括:

  • 接口

  • 数组


五、自动类型转换与强制转换

自动类型转换

小类型自动转大类型:

byte → short → int → long → float → double

示例:

int a = 10;
long b = a;

强制类型转换

大类型转小类型:

long a = 100;
int b = (int) a;

可能出现:

  • 精度丢失

  • 数据溢出


六、Java 值传递与引用传递

Java 只有值传递,没有真正的引用传递。

基本类型

传递的是 值的副本

public static void change(int a){
    a = 20;
}

不会改变原值。


引用类型

传递的是 引用地址的副本

public static void change(Person p){
    p.name = "Tom";
}

可以修改对象内部属性。

但不能改变原引用指向。


七、Integer 缓存机制(-128 到 127)

Java 为 Integer 提供了缓存机制:

[-128,127]

示例:

Integer a = 100;
Integer b = 100;

System.out.println(a == b); // true

超过范围:

Integer a = 200;
Integer b = 200;

System.out.println(a == b); // false

因为超过范围会 创建新对象


八、BigDecimal 与 double

在涉及 金额计算 时推荐使用:

BigDecimal

原因:

double 存在 精度丢失问题

例如:

0.1 + 0.2 ≠ 0.3

正确写法:

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");

注意:

使用字符串构造。


九、面向对象三大特性

Java 面向对象三大特性:

封装
继承
多态

1 封装

隐藏内部实现,对外提供接口。

例如:

private String name;

public void setName(String name){
    this.name = name;
}

好处:

  • 安全

  • 易维护


2 继承

子类继承父类:

class Dog extends Animal

优点:

  • 代码复用


3 多态

多态表现为:

方法重载

同一个类中:

方法名相同
参数不同
add(int a,int b)
add(double a,double b)

方法重写

子类重写父类方法:

@Override
public void run(){
}

十、抽象类 vs 接口

特性抽象类接口
关键字abstract classinterface
继承单继承多实现
方法可有普通方法JDK8可有default
变量普通变量public static final

十一、static 关键字

static 表示 属于类

static 修饰变量

static int age;

特点:

  • 所有对象共享


static 修饰方法

static void test(){
}

特点:

  • 可以通过类名调用


static 代码块

类加载时执行一次:

static{
    System.out.println("初始化");
}

十二、深拷贝与浅拷贝

浅拷贝

复制引用地址。

两个对象共享同一个引用。


深拷贝

复制整个对象。

互不影响。


十三、Java 创建对象的方式

1️⃣ new 关键字

User user = new User();

2️⃣ 反射

User user = User.class.newInstance();

3️⃣ clone()

4️⃣ 反序列化


十四、反射机制

反射允许程序在 运行时获取类信息

可以:

  • 获取类

  • 获取方法

  • 获取属性

  • 动态创建对象

示例:

Class clazz = Class.forName("User");

应用:

  • Spring

  • MyBatis

  • 注解解析


十五、BIO、NIO、AIO

IO模型特点
BIO同步阻塞
NIO同步非阻塞
AIO异步非阻塞

BIO

一个连接一个线程。

并发能力差。


NIO

一个线程管理多个连接。

使用:

Selector

高并发服务器常用。


AIO

完全异步 IO。

回调机制。


十六、Java 异常体系

Java 异常顶级类:

Throwable

分为:

Error
Exception

Error

系统级错误,例如:

  • OutOfMemoryError

程序无法处理。


Exception

程序可以处理。

分为:

运行时异常

例如:

  • NullPointerException

  • IndexOutOfBoundsException


受检异常

例如:

  • IOException

  • SQLException

必须处理。


十七、Object 类核心方法

Object 是所有类的父类。

常见方法:


toString()

用于返回对象信息。

@Override
public String toString(){
    return "User{id=" + id + "}";
}

getClass()

获取类对象。

obj.getClass()

clone()

复制对象。

默认是 浅拷贝


十八、== 与 equals

==

比较:

  • 基本类型:值

  • 引用类型:地址


equals()

用于比较对象内容。

例如 String 重写了 equals 方法。


十九、为什么重写 equals 必须重写 hashCode

HashMap 存储流程:

hashCode()
   ↓
定位数组
   ↓
equals()
   ↓
判断是否相同

如果只重写 equals:

可能导致 HashMap 去重失效

因此必须同时重写。


二十、String 常用方法

常见方法:

length()
equals()
substring()
trim()
replace()
isEmpty()

示例:

String s = "hello";

s.length();
s.substring(1);
s.replace("h","H");

二十一、String、StringBuffer、StringBuilder区别

类型是否可变线程安全性能
String不可变安全
StringBuffer可变安全
StringBuilder可变不安全

使用建议

单线程字符串操作:

StringBuilder

多线程:

StringBuffer

普通字符串:

String

二十二、ArrayList 扩容机制

ArrayList 底层是 动态数组

默认容量:

10

扩容规则:

原容量 × 1.5

核心流程:

add()
 ↓
ensureCapacity()
 ↓
grow()
 ↓
Arrays.copyOf()

总结

Java 基础面试常见核心考点:

  • Java 跨平台原理

  • 数据类型

  • 面向对象

  • 抽象类 vs 接口

  • static 关键字

  • equals 与 hashCode

  • String 相关问题

  • BIO / NIO

  • Java 异常体系

  • 集合框架

这些内容几乎是 Java 面试必问八股文,熟练掌握可以应对大部分基础面试。

Logo

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

更多推荐