单例模式与静态方法的比较

最近学习了一下单例模式,突然想到一些自己写代码的时候产生的工具类(静态方法)于是就想到了两者的区别,在网上也搜集了一些资料,但是都是大同小异没什么大的区别,这里做一下整理和写一下自己的理解

1、单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
2、单例可以被延迟初始化,静态类一般在第一次加载时初始化;
3、单例类可以被集成,他的方法可以被覆写
4、静态方法是面向过程的,如果我们Java面向对象学得好的话应该是不会出现这种类的

内存上:
单例模式执行的时候需要new 一个对象出来存储在堆栈里面,而静态方法不需要,它不依赖于对象(普通方法是Object.method而静态方法是class.method),但是他也是需要内存的,它是以代码块来存储

生命周期:
静态方法的类会在代码编译的时候就被加载,静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。

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

执行效率:
静态方法与实例方法,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
但是从日志打印来看,个人感觉还是静态方法在执行效率上快一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值