静态内部类单例

简介: 静态内部类单例

1、简介

静态内部类单例是一种线程安全的单例实现方式,它利用了Java 的类加载机制来实现单例模式。

它的实现思路是将单例的实例放在一个静态内部类中,在第一次调用单例对象时再进行创建。这种实现方式既能保证线程安全,又能保证单例对象的延迟加载。

2、代码实现

1. public class Singleton {
2. //Singleton单例
3. private Singleton(){}
4. private static class SingletonHolder{
5. private static final Singleton INSTANCE = new Singleton();
6.     }
7. public static Singleton getInstance(){
8. return SingletonHolder.INSTANCE;
9.     }
10. }

3、优缺点

优点:

①线程安全:由于使用了Java类加载机制,单例对象在类加载阶段就已经创建好,并且只会创建一次,因此是线程安全的。

②类加载性能优秀:在使用单例对象时才会进行创建,而且只会创建一次,在资源有限的情况下能够节约内存。

③使用简单:通过Singleton.getInstance()来获取单例对象

缺点:

①可能会增加类的数量,因为需要一个静态内部类来保存单例对象

②第一次加载时可能会略微增加启动时间

总结来说,静态内部类单例是一种实现单例模式的优秀方式,它既保证了线程安全,又具有很好的类加载性能,并且使用起来非常方便。

4、应用场景

静态内部类单例模式非常适合在需要频繁使用、且资源占用较小的单例对象时使用。

常见的应用场景有:

①工具类:比如日期处理工具类、字符串工具类等

这些工具类一般需要非常频繁地使用,而且资源消耗也不大,所以可以使用静态内部类单例模式来实现。

1. public class DateUtils {
2. private DateUtils(){}
3. private static class DateUtilsHolder {
4. private static final DateUtils INSTANCE = new DateUtils();
5.     }
6. public static DateUtils getInstance() {
7. return DateUtilsHolder.INSTANCE;
8.     }
9. public String formatDate(Date date){
10. //do format job
11.     }
12. }

②日志管理类:由于日志管理类可能会在多个地方使用,并且资源消耗也不大,所以可以使用静态内部类单例模式来实现。

1. public class Logger {
2. private Logger(){}
3. private static class LoggerHolder {
4. private static final Logger INSTANCE = new Logger();
5.     }
6. public static Logger getInstance() {
7. return LoggerHolder.INSTANCE;
8.     }
9. public void log(String message){
10. //do log job
11.     }
12. }

静态内部类的实际应用场景不局限在这里,还有很多其他场景可以使用,如配置管理类、高效缓存类等。

相关文章
|
6月前
|
Java
成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类
这篇文章详细介绍了Java中的四种内部类:成员内部类、静态内部类、局部内部类和匿名内部类,包括它们的使用场景、特点和示例代码。
成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类
|
8月前
|
Java
【Java基础】 内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
Java内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
49 0
|
Java
内部类(下)匿名内部类,静态内部类的使用
内部类(下)匿名内部类,静态内部类的使用
109 0
|
9月前
|
Java
30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
77 1
成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用
成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用
143 0
静态内部类,实例内部类
我们创建了静态内部类,那么我们怎么能获取静态内部类对象呢? 这里我们知道静态变量是不依赖于对象的,所以不用先new一个Outclass1对象(讲到实例内部类会用),可以直接new OutClass.InnerClass()。
96 0
|
设计模式 Java
3.2 内部类的类型:静态内部类
3.2 内部类的类型:静态内部类
82 0
|
Java
5.1 内部类与外部类的关系:内部类的实例化方式
5.1 内部类与外部类的关系:内部类的实例化方式
233 0
|
Java
第30篇:根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
🌻 嵌套类、内部类、局部类等是 Java 面向对象中的难点,但好好研究清楚感觉也不是特别难。博主再次学习这部分内容,以次巩固知识。 🌻 博主其他介绍相关内容的文章:嵌套类、内部类、静态嵌套类... 🌻 博主以官方教程为基础开始学习,其中的概念都是以官方教程为主,这样学习起来比较放心。
169 0
第30篇:根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
java内部类——静态内部类
java内部类——静态内部类