简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
- 🌻1. 前言
- 🌻2. Java不可变对象介绍
- 🌻3. 代码实例
- 🌻3.1 基本不可变对象
- 🌻3.2 不可变对象与方法返回
- 🌻3.3 不可变对象与线程安全
- 🌻3.4 不可变对象总结
🌻1. 前言
本篇目的:Java进阶之不可变对象:用法实例
🌻2. Java不可变对象介绍
-
基本概念
- 不可变对象是指对象一旦创建后,其状态不能被修改的对象。
- 不可变对象通常通过将类声明为
final
,并将所有字段声明为final
来实现。
-
功能
- 提供线程安全的对象,无需额外的同步机制。
- 确保对象的状态在创建后不会被修改,提高代码的可读性和可维护性。
-
使用限制
- 不可变对象的所有字段必须在构造方法中初始化。
- 不可变对象不能提供修改状态的方法。
-
性能特性
- 不可变对象减少了并发编程中的同步开销。
- 不可变对象可以安全地共享,无需担心状态被修改。
-
使用场景
- 广泛应用于需要线程安全的场景,如多线程编程。
- 特别适用于需要确保对象状态不变的场景,如配置对象和数据传输对象。
🌻3. 代码实例
🌻3.1 基本不可变对象
-
应用场景
- 创建一个不可变对象,确保对象状态不可修改。
-
用法实例
public final class ImmutableExample {private final int number;public ImmutableExample(int number) {this.number = number;}public int getNumber() {return number;}public static void main(String[] args) {ImmutableExample obj = new ImmutableExample(42);System.out.println("Number: " + obj.getNumber());} }
输出:
Number: 42
🌻3.2 不可变对象与方法返回
-
应用场景
- 不可变对象提供方法返回值,确保返回值也是不可变的。
-
用法实例
public final class ImmutableExample {private final int number;public ImmutableExample(int number) {this.number = number;}public int getNumber() {return number;}public ImmutableExample increment() {return new ImmutableExample(number + 1);}public static void main(String[] args) {ImmutableExample obj = new ImmutableExample(42);System.out.println("Original Number: " + obj.getNumber());ImmutableExample incremented = obj.increment();System.out.println("Incremented Number: " + incremented.getNumber());} }
输出:
Original Number: 42
Incremented Number: 43
🌻3.3 不可变对象与线程安全
-
应用场景
- 不可变对象在多线程环境中确保线程安全。
-
用法实例
public final class ImmutableExample {private final int number;public ImmutableExample(int number) {this.number = number;}public int getNumber() {return number;}public static void main(String[] args) {ImmutableExample obj = new ImmutableExample(42);new Thread(() -> {System.out.println("Thread 1: " + obj.getNumber());}).start();new Thread(() -> {System.out.println("Thread 2: " + obj.getNumber());}).start();} }
输出:
Thread 1: 42
Thread 2: 42
🌻3.4 不可变对象总结
关键词 | 功能描述 | 典型应用 |
---|---|---|
基本不可变对象 | 创建不可变对象,确保状态不可修改 | 提供线程安全的对象,适用于多线程编程 |
方法返回 | 提供方法返回值,确保返回值也是不可变的 | 确保方法调用不会修改对象状态,适用于数据传输 |
线程安全 | 在多线程环境中确保线程安全 | 提供线程安全的对象,无需额外同步机制 |