Java 基础是后续学习集合、并发、JVM、Spring 和各类中间件的前置能力。这部分内容不只是背语法,更重要的是理解 Java 的对象模型、参数传递、泛型擦除、反射调用、动态代理、序列化边界和框架扩展机制。
适合谁看
- 刚开始系统学习 Java,想把基础语法和核心机制串起来的读者。
- 准备 Java 基础面试题,希望快速查漏补缺的同学。
- 已经写过 Java 项目,但对反射、代理、泛型、SPI、序列化等机制理解不深的开发者。
- 想继续学习集合、并发、JVM、Spring 源码前,需要补齐前置知识的工程师。
《阿里巴巴 Java 开发手册》中提到:“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。
浮点数的运算竟然还会有精度丢失的风险吗?确实会!
示例代码:
float a = 2.0f - 1.9f;
float b = 1.8f - 1.7f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999905
System.out.println(a == b);// false
泛型
什么是泛型?有什么作用?
Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。如无特别说明,以下行为以 Java 8 为准。
编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如 ArrayList<Person> persons = new ArrayList<Person>() 这行代码指明了该 ArrayList 只能传入 Person 类型的对象,如果传入其他类型会报错(JDK 7 起可写 new ArrayList<>(),由编译器推断类型参数)。
基础概念与常识
Java 语言有哪些特点?
- 简单易学(语法简单,上手容易);
- 面向对象(封装,继承,多态);
- 平台无关性(Java 虚拟机实现平台无关性);
- 支持多线程(C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
- 可靠性(具备异常处理和自动内存管理机制);
- 安全性(Java 语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源);
- 高效性(通过 Just In Time 编译器等技术的优化,Java 语言的运行效率还是非常不错的);
- 支持网络编程并且很方便;
- 编译与解释并存;
- ……
面向对象基础
⭐️ 面向对象和面向过程的区别
面向过程编程(Procedural-Oriented Programming,POP)和面向对象编程(Object-Oriented Programming,OOP)是两种常见的编程范式,两者的主要区别在于解决问题的方式不同:
异常
Java 异常类层次结构图概览:

Exception 和 Error 有什么区别?
在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类:
final 关键字
final 关键字,意思是最终的、不可修改的,最见不得变化,用来修饰类、方法和变量,具有以下特点:
-
final 修饰的类不能被继承,final 类中的所有成员方法都会被隐式的指定为 final 方法;
-
final 修饰的方法不能被重写;
-
final 修饰的变量只能被赋值一次。如果是基本数据类型变量,其值在初始化后不能更改;如果是引用类型变量,初始化后不能再指向另一个对象,但所引用对象自身仍可能可变。只有满足 JLS“常量变量”条件的 final 变量才是编译期常量。
我在一篇讨论金额字段类型的文章评论区里,看到几种完全不同的答案:有人坚持用 Long 存分,有人说利息、汇率这类场景要用 BigDecimal,还有人提到接口里直接传字符串。
这些说法讨论的不是同一件事。用 Long 存分,说的是金额如何保存;利息和汇率用 BigDecimal,说的是金额如何计算;接口传字符串,通常只是数据传输格式。
已经确定最小单位的金额可以用 long 保存。计算过程中需要保留小数,或者要明确指定舍入方式,则使用 BigDecimal。两种类型可以出现在同一个系统里。
1. 代理模式
代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。
举个例子:新娘找来了自己的姨妈来代替自己处理新郎的提问,新娘收到的提问都是经过姨妈处理过滤之后的。姨妈在这里就可以看作是代理你的代理对象,代理的行为(方法)是接收和回复新郎的提问。

