单例模式和Static的区别!

如一宝宝 2009-07-09 01:59:47
都是为了提高系统性能,好像没什么区别啊,感觉static更方便,不需要写额外的东西,
语言本身就支持,不需要考虑多线程的问题!

既然如此还要单例干嘛!
...全文
1572 50 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunshineboy8 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lwb314 的回复:]
举个例子,你是个程序员,你希望任何时候有一个class A的实例就可以了,所以你在你的class B里封装了一个A的对象
class B
{
static A a = new A();
}
这样以后所有代码大家都可以使用B.a来调用A里的方法。很方便,可是没几个月你走了,换我接手
我想使用A里的方法,可是也许我根本就没有你的API,我不知道B里已经有了一个static的A,因此我在我的……
[/Quote]

你的理解是错误的,看一面代码:
public class D {
private D() {
new A();
}
private static D inst;
public static D getInst() {
if (inst == null) {
return new D();
}
return inst;
}
}


public class E {
private E() {
new A();
}
private static E inst;
public static E getInst() {
if (inst == null) {
return new E();
}
return inst;
}
}

同样会出理多个A对象。
努力 2009-12-03
  • 打赏
  • 举报
回复
观注中
eyes_on_you 2009-09-02
  • 打赏
  • 举报
回复
java code

package edu.scit.singletion;

public class Singletion {
public static Singletion singletion;

//专用的构造器,防止客户机创建多个实例
private Singletion(){

}

//设计唯一的访问接口
public static synchronized Singletion getInstance(){
if(singletion== null){
singletion = new Singletion();
}
return singletion;
}

public void print(){
System.out.println("==========hello==========");
}
public String toString(){
return "king";

}
}

薪水 2009-07-23
  • 打赏
  • 举报
回复
mark
龙翔飞雪 2009-07-23
  • 打赏
  • 举报
回复
别争了, 看看MSDN这篇文章吧, 远古到C++, 现代到Java, C#,
还有考虑到线程安全.

http://msdn.microsoft.com/en-us/library/ms954629.aspx
龙翔飞雪 2009-07-21
  • 打赏
  • 举报
回复
C# 有readonly , static变量可以用来做单例.

但Java么... 就有点欠缺了
qxyhnyz001 2009-07-15
  • 打赏
  • 举报
回复
单例是在你需要的时候才创建的,延迟加载的。
robyjeffding 2009-07-13
  • 打赏
  • 举报
回复
顶一下!
bwangel 2009-07-13
  • 打赏
  • 举报
回复
单例是可以延迟加载的,static是要无条件加载的
ericlntm 2009-07-13
  • 打赏
  • 举报
回复
一个是编程模式,一个是内部机制,尽管有些地方使用效果相同,但是,出发点都不一样,怎么能放一起比较呢?
「已注销」 2009-07-13
  • 打赏
  • 举报
回复
随你怎么用,合理的解决问题才是王道
龙翔飞雪 2009-07-13
  • 打赏
  • 举报
回复
LZ 严重错误, 再多多理解啥是单例吧. (参考Spring IoC)
surepretty 2009-07-13
  • 打赏
  • 举报
回复
mark
b47248054 2009-07-13
  • 打赏
  • 举报
回复
学习了
DryKillLogic 2009-07-13
  • 打赏
  • 举报
回复
垃圾回收机制。。。。不小心打错了
DryKillLogic 2009-07-13
  • 打赏
  • 举报
回复
而static有还是有可能被new出多个实例的,而这多个实例在用完之后也许就没用了,还要等待立即回收机制来回收,所以效率自然不如单例。
DryKillLogic 2009-07-13
  • 打赏
  • 举报
回复
单例模式最大的好处就是节省内存空间,提高效率,因为他永远都只有一个实例!这是尚学堂马士兵老师说的
sxtbuaa 2009-07-13
  • 打赏
  • 举报
回复
单例针对对象,static针对类(即在没有类实例的情况下也可以使用)
周公 2009-07-13
  • 打赏
  • 举报
回复
使用单例模式可以限制对象实例的个数,除了返回实例的操作之外不能被new出来。这在某些需要限制对象访问的场合下是有用的。
使用static的话并不能限制对象实例的个数。
apiglovepig 2009-07-13
  • 打赏
  • 举报
回复
应该还是有区别的
加载更多回复(30)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧