单例模式与类名静态方法调用的区别?java web开发为什么样不用静态方法而使用new对象或者spring
什么时候选择用单例模式,什么时候选择用类的静态方法直接调用?两者有什么区别
单例模式只生成①个实例,而类名静态方法的直接调用在加载JVM时该类就编译好了,两者相当于都是只占用①个实例大小的内存。那么我们该如何选择?
谢邀。
单例类和静态方法最大的区别在于单例类的实例是①个对象。它具有面向对象编程中,继承,封装,多态的所有特性。看下面这个例子:
public class Main { public static void main(String[] args) { Singleton inst = Singleton.getInstance(); inst.sayHello(); }}abstract class SingletonBase { public void sayHello() { System.out.println(\"base\"); }}class Singleton extends SingletonBase { public static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; }}
这个单例类中有继承(这不是①个线程安全的单例类,我手头上没有Java环境,盲打的,所以就偷了个懒),当然,我们也可以增加多态的特性。但是静态方法就没办法了。
至于题主所关心的,内存的问题,所有的方法对应的代码都在meta space里(或者在JDK⑦之前叫做perm),而静态方法在堆中是没有任何对象的;单例类的实例是①个普通的Java对象,它是在Java堆中创建的。
并发①起,服务就要跪,程序变大,栈先溢出等等……实在有太多的缺点
________________________________
更新:
太多缺点有点过了,也有优点的。静态代码执行效率很高,如果你的内存实在用不完,那就上吧\", \"extras\": \"\", \"created_time\": ①④⓪⑤⑨①⑤⑤⑦⑨ · \"type\": \"answer
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息