1. final 关键字
定义:final 关键字表示“最终”,用于修饰类、方法、变量,限制其扩展或修改。
1.1 final 的修饰范围与作用
| 修饰对象 | 作用 | 示例 |
|---|---|---|
| 类 | 该类不能被继承(最终类) | public final class StringUtils { ... } |
| 方法 | 该方法不能被子类重写(最终方法) | public final void init() { ... } |
| 变量 | 变量只能被赋值一次(常量) | final int MAX_VALUE = 100; |
变量修饰的注意事项:
- 基本类型变量:数据不能被改变。
final int AGE = 25; // AGE = 30; // 编译报错! - 引用类型变量:地址不能被改变,但地址指向的对象内容可变。
final List<String> list = new ArrayList<>(); list.add("Java"); // 合法 // list = new LinkedList<>(); // 编译报错!
2. 常量(static final)
定义:使用 static final 修饰的成员变量称为常量,用于记录系统配置等不可变数据。
命名规范:
- 全大写字母,单词间用下划线连接(如
MAX_SIZE)。
代码示例:
public class Constant {
public static final String SCHOOL_NAME = "传智教育";
public static final int MAX_STUDENTS = 1000;
}
优势与原理:
- 可读性与维护性:通过常量名明确语义,避免魔法数值。
- 宏替换:编译时,常量会被替换为字面量,性能与直接使用字面量一致。
3. 单例设计模式
核心目标:确保一个类只能创建一个对象,节省内存并保证全局唯一性。
3.1 饿汉式单例
特点:类加载时立即创建对象(线程安全,但可能浪费内存)。
实现步骤:
- 私有化构造器。
- 定义静态变量存储唯一对象。
- 提供静态方法返回对象。
代码示例:
public class SingletonEager {
// 1. 私有构造器
private SingletonEager() {}
// 2. 静态变量存储对象
private static final SingletonEager INSTANCE = new SingletonEager();
// 3. 静态方法返回对象
public static SingletonEager getInstance() {
return INSTANCE;
}
}
3.2 懒汉式单例
特点:延迟加载,首次调用时创建对象(需解决线程安全问题)。
实现步骤:
- 私有化构造器。
- 定义静态变量但不初始化。
- 在静态方法中判断并创建对象(需加锁)。
代码示例(基础版,非线程安全):
public class SingletonLazy {
// 1. 私有构造器
private SingletonLazy() {}
// 2. 静态变量(不初始化)
private static SingletonLazy instance;
// 3. 静态方法返回对象
public static SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
线程安全改进(双重检查锁):
public class SingletonLazy {
private static volatile SingletonLazy instance;
private SingletonLazy() {}
public static SingletonLazy getInstance() {
if (instance == null) {
synchronized (SingletonLazy.class) {
if (instance == null) {
instance = new SingletonLazy();
}
}
}
return instance;
}
}
3.3 单例模式的应用场景
- 全局配置管理:如数据库连接池、日志管理器。
- 工具类对象:如
Runtime.getRuntime()。 - 资源共享对象:如线程池、缓存对象。
优势:
- 避免重复创建对象,节省内存。
- 确保全局唯一性,避免数据不一致。
4. 总结
| 特性 | final 关键字 | 单例模式 |
|---|---|---|
| 核心作用 | 限制扩展或修改 | 确保类只有一个实例 |
| 常见应用 | 常量、工具类、不可变类 | 全局配置管理、资源共享对象 |
| 设计要点 | 明确不可变性,避免误操作 | 构造器私有化、静态方法控制对象创建 |
最佳实践:
final使用:优先用于工具类、常量定义。- 单例选择:高并发场景用饿汉式,资源敏感场景用懒汉式(需处理线程安全)。

被折叠的 条评论
为什么被折叠?



