JAVA Static方法与单例模式的理解
最近用sonar测评代码质量的时候,发现一个问题,工程中一些util类,以前写的static方法都提示最好用单例的方式进行改正。
为此,我仔细想了想,发现还是很有道理的。这里谈谈我个人对static方法与单例模式的理解。
所谓单例模式,我不做过多解释,推荐java设计模式之禅这本书,好好理解一下。
这里我谈谈两种写法:
以前一些公共的类,我不假思索,习惯按照如下写法去写:
public class DateUtil {
public final static String DATEFORMAT = "YYYY-MM-DD"; private DateUtil() { } } |
调用的时候直接DateUtil.changeDateFormat();
如果希望这个类作为一个单例,OK,可以直接在方法里添加一个私有的构造方法。
这样一来,既可以避免用户new一个对象,又可以实现方法的调用,看似很好。
其实,这种做法最大的缺点就是static作为一个静态方法,在加载类的时候就被加载到内存中,不管你用不用都占用这个位置,这种设计是不推荐的。
而采用单例模式的写法很好的解决了这个问题,如下:
public class DateUtil {
public final String DATEFORMAT = "YYYY-MM-DD"; private DateUtil() { } private static Integer LOCK = 0; public static DateUtil getInstance() { 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
JAVA Static方法与单例模式的理解相关推荐
- Java static方法里为什么不能使用this关键字
Static方法是类方法,先于任何的实例(对象)存在.即Static方法在类加载时就已经存在了(JAVA虚拟机初始化时), 但是对象是在创建时才在内存中生成.而this指代的是当前的对象. 参考:ht ...
- java static方法
static方法 1.static方法的作用访问static变量和static方法2.static方法的调用方式通过类名调用.通过对象名来访问3.不可以静态方法中不可以访问非静态变量 静态方法中不可以 ...
- java static方法过多_Java 项目静态方法过多会有什么样影响?静态类、静态方法影不影响多线程性能...
最近在看 Play! framework,整个控制层都是静态方法,引发了很多争论和口水,大家怎么看的? 静态方法不能继承,会影响①部分设计思路,设计出的程序比较结构化. 另外静态方法不能读取对象级别的 ...
- Java static方法中为什么只能调用静态方法?
import java.io.*; import java.util.*;public class Main{public static void main(String args[]) throws ...
- java static方法(单例)
参考 1.可以直接用过类名调用,大局观(类(静态变量或者方法,方法)),静态变量是独立于类里面的,普通方法要通过对象去调用 2.static在类中只存在一份副本:static变量也称作静态变量,静态变 ...
- main方法中args_public static void main(String [] args)– Java main方法
main方法中args public static void main(String[] args) is the most important Java method. When you start ...
- java使用单例与使用static方法的对于和个人理解
1最近在重构项目中的老模块,打算引入spring boot对原有项目自己封装的依赖注入模块进行替换.项目中存在大量的工具类,大都是使用static方法编写的,比如时间工具类用于格式化日期,编码工具类用 ...
- java中的static方法可以被重写吗?(从方法调用过程理解)
答案是:不可以. 首先明确一点,在子类中重写父类的static方法,是不会报错的,编译也可以通过,但是在通过一个声明为父类,实际类型为子类的引用变量调用该方法时,发现被调用的仍是父类中原本以为会被覆盖 ...
- java static关键字_好程序员Java教程分享static关键字的理解
好程序员Java教程分享static关键字的理解,static关键字含义可以理解为静态的. 1. 当其修饰属性时,该属性为整个类公有,所有的对象操作的都是同一个静态属性.所以调用时应该使用类名去调用, ...
最新文章
- K8s, Kafka事件溯源架构模式和用例示例
- 便携式不锈钢管道焊接机器人_304不锈钢管居然可以发黑!?
- web login do.php,dologin.php
- 【错误记录】国际化报错 ( “xxx“ is not translated in “zh“ (Chinese) )
- Geany 代码自动补齐功能设置
- 通过SAP customizing修改显示message 的type
- 计算机网络 实验教案,《计算机网络》实验教案.pdf
- input 框 去掉下面的提示文字、提示选项
- python类的使用_python类的使用
- js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例
- mysql 并发_mysql 的读写锁与并发控制
- ubuntu解决安装Scrapy库时报x86_64-linux-gnu-gcc错误
- Robot Framework操作
- Web前端JSP面试题
- golang mysql null_Golang将变量声明为NULL
- 支持流量计费的云服务器,云服务器流量计费功能
- 科学网肖波:海外博后申请的一点经验与看法
- Linux下IPC方式之共享存储映射(mmap)
- PS学习笔记--操作篇
- ImageJ如何测量物体的面积大小