博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA Static方法与单例模式的理解
阅读量:6982 次
发布时间:2019-06-27

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

最近用sonar测评代码质量的时候,发现一个问题,工程中一些util类,以前写的static方法都提示最好用单例的方式进行改正。

为此,我仔细想了想,发现还是很有道理的。这里谈谈我个人对static方法与单例模式的理解。

所谓单例模式,我不做过多解释,推荐java设计模式之禅这本书,好好理解一下。

这里我谈谈两种写法:

以前一些公共的类,我不假思索,习惯按照如下写法去写:

public class DateUtil {
    public final static String DATEFORMAT = "YYYY-MM-DD";
    private DateUtil() {
    }
    public static void changeDateFormat() {
    }
}
调用的时候直接DateUtil.changeDateFormat();

如果希望这个类作为一个单例,OK,可以直接在方法里添加一个私有的构造方法。

这样一来,既可以避免用户new一个对象,又可以实现方法的调用,看似很好。

其实,这种做法最大的缺点就是static作为一个静态方法,在加载类的时候就被加载到内存中,不管你用不用都占用这个位置,这种设计是不推荐的。

而采用单例模式的写法很好的解决了这个问题,如下:

public class DateUtil {
    public final String DATEFORMAT = "YYYY-MM-DD";
    public static DateUtil instance = null;
    private DateUtil() {
    }
    private static Integer LOCK = 0;
    public static DateUtil getInstance() {
        synchronized (LOCK) {
            if (instance == null) {
                instance = new DateUtil();
            }
            return instance;
        }
    }
    public  void changeDateFormat() {
    }
}

同样,这种方式可以确保用户只能获取一个实例,符合单例的设计思想。

同时,只有在用这个实例调用方法的时候,方法才被加入到内存中,当对象不用的时候,gc会将方法回收,效率高了很多,当然我这里构建的单例是线程安全的。

简单介绍到这里,如果对JAVA内存感兴趣的可以看我之前的文章,这里还要推荐另一个兄弟的,链接发上:

1.http://blog.csdn.net/hongshan50/article/details/40583875

2.如果对static方法和普通方法占用JAVA内存感兴趣的,看下面这篇:

http://blog.sina.com.cn/s/blog_4fe01e630100g775.html

转载于:https://www.cnblogs.com/hainange/p/6153623.html

你可能感兴趣的文章
jQuery-1.9.1源码分析系列(六) 延时对象应用——jQuery.ready
查看>>
关于Kingfisher--备用
查看>>
段错误调试神器 - Core Dump详解
查看>>
审计参数 audit_trail
查看>>
linux shell的输出效果修改方法(界面颜色)
查看>>
《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止
查看>>
Matlab Command Window 进度提示
查看>>
利用redis写webshell
查看>>
IO 延迟与Queue Depth
查看>>
IOS 设备信息读取
查看>>
不可重复读和幻读的区别
查看>>
LeetCode_Path Sum II
查看>>
CF 439C(251C题)Devu and Partitioning of the Array
查看>>
更新整理本人全部博文中提供的代码与工具(Java,2014.09)
查看>>
常见的显示器分辨率
查看>>
【Android】12.3 在当前Activity中获取另一个Activity的返回值
查看>>
【云计算】docker的小知识,帮你更深入理解容器技术
查看>>
Dreamweaver PHP代码护眼配色方案
查看>>
记Booking.com iOS开发岗位线上笔试
查看>>
MVC之ActionFilterAttribute自定义属性
查看>>