博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态类和单例
阅读量:5901 次
发布时间:2019-06-19

本文共 838 字,大约阅读时间需要 2 分钟。

hot3.png

写静态类和单例时首先要明确一点: 静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。

如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(静态的属性变量不会被GC清除),除非整个JVM退出了。

在明确上述之后我们再来考虑是使用静态方法还是静态类。

1.单例可以被延迟初始化,静态类一般在第一次加载是初始化;

2.单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);

3.单例类的override的能力,因Java中的静态方法是不可以覆盖的,这就导致其没有太多的灵活性,而你可通过继承的方式覆盖单例类中定义的方法来进行方法重写;

4.静态类很难模拟,因此难于单例测试,单例更容易模拟,因为也比静态类易于编写单元测试,不论神马单例期望神马,你都可以传递模拟对象,例如构造方法或方法参数;

5.许多依赖注入的框架对单例都有良好的管理,例如Spring,使用它们非常容易;

6.如果你的需求中需要维护状态信息,则单例比静态类更适合,因为后者在维护状态信息方面是非常可怕的,并导致狡滑的bug;

7.然而静态类写起来更简便...

一个满足线程安全的的单例模式

public class Singleton {    private Singleton() {}    private static class SingletonInstance {        private static final Singleton INSTANCE = new Singleton();    }    public static Singleton getInstance() {        return SingletonInstance.INSTANCE;    }}

转载于:https://my.oschina.net/fusublog/blog/1839234

你可能感兴趣的文章
Windows下memcached的安装配置
查看>>
ubuntu: firefox+flashplay
查看>>
常见的海量数据处理方法
查看>>
web.xml 中CharacterEncodingFilter类的学习
查看>>
贪吃蛇逻辑代码
查看>>
实现c协程
查看>>
ASP.NET视频教程 手把手教你做企业论坛网站 视频教程
查看>>
[LeetCode] Meeting Rooms II
查看>>
从Swift学习iOS开发的路线指引
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
实验五
查看>>
3-继承
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
JSP----九大内置对象
查看>>
Java中HashMap详解
查看>>
delphi基本语法
查看>>
沙盒目录介绍
查看>>