设计模式中的单例中的成员为什么不都用static呢?

除了一个stadic成员变量和一个static的get方法,所有成员方法成员变量为什么不都为static。

5个回答

static 确保只在类加载的时候才初始化一次。
单例模式是运行的当前虚拟机中有且只有一个需要的对象,不存在重复(通过private构造方法控制不让外界访问)。
static 是给类静态成员变量使用的,属于类的属性,一般是一些常量之类的东西,从加载上来说对于类和对象之间,在类加载到内存时候静态成员变量就存在了,而对象还不存在。
另外 静态方法只能调用静态方法和静态变量这个你也应该知道,如果全部搞成静态方法那么意味着其他成员变量都要是静态的,很不方便。

如果全部都用static,那么就不用单例模式了,单例模式就是用来唯一创建对象的实例,创建对象实例的目的就是访问成员变量(静态变量直接能访问不需要实例化)。
现在的问题就是为什么要使用单例模式,这个是根据你的需要和你所用的语言决定的。比如说一些编程语言不能继承静态成员,或者不能用静态成员实现接口等等。
但是用设计模式是一个见仁见智的事情,关键看你的设计意图,而不是为了设计模式而设计模式,那是本末倒置的。如果你发现不用单例模式也能解决问题,那就说明单例模式不是必须的。

如果成员方法,变量都定义称static,那么当程序执行时,就回初始化.单例的instance可以延迟这个初始化.

首先static占用内存,如果对象过多的话会占用非常多,其次安全性很不好,多会被内存溢出攻击影响,整理内存软件对于这样的程序性能影响也很大

类的成员方法全部静态并将构造函数私有的话,将在不创建对象的情况下达到访问类成员方法的目的,但静态的东西放在JVM方法区应该不太好吧,内存得不到回收。不如使用单例,只创建一个对象,而且该对象只在需要的时候创建(延迟加载,而不是类初始化的时候就加载),在不可达的时候还可以进行回收

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐