有关Singleton模式的初始化问题?

cxhz_cn 2002-10-25 05:20:30
public class Singleton {

private Singleton() {
}

private static Singleton instance = new Singleton();

public static Singleton getInstance(){
return instance;
}
}


Singleton.getInstance()可以得到Singleton的句柄

请问static Singleton instance 是啥时候被初始化的???

...全文
107 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxj_2000 2002-11-21
  • 打赏
  • 举报
回复
你的程序错了,正确的是:

public class Singleton {

private Singleton() {
}

private static Singleton singleton;

public static Singleton getInstance(){
if(singleton == null) {
singleton = new Singleton();
}
return instance;
}
}
skyyoung 2002-11-09
  • 打赏
  • 举报
回复
http://www-106.ibm.com/developerworks/java/library/j-dcl.html?dwzone=java
woodlee 2002-11-07
  • 打赏
  • 举报
回复
不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
初始化的顺序包括构造方法调用的顺序如下:
1. 主类的静态成员首先初始化。
2. 主类的超类的构造方法按照从最高到最低的顺序被调用。
3. 主类的非静态对象(变量)初始化。
4. 调用主类的构造方法
magu 2002-11-05
  • 打赏
  • 举报
回复
在《java编程思想》中,对“对象的初始化顺序”有详细的描述。静态的属性是在类被第一次加载时初始化的。
smallfox 2002-11-05
  • 打赏
  • 举报
回复
所有static var都先初始化
此过程先于 constructor

该类刚被load的时候,static 的就都被初始化了


========
虽然我不主动向人要分,
但你要给,我也绝不拒绝。。
oh............yaeh....
===================
weimenren 2002-10-28
  • 打赏
  • 举报
回复
你其实迷惑的是类中代码运行的前后次序:

static变量:在类第一次初始化的时间首先被加载,并且永驻内存,直到你释放的时间。

cxhz_cn 2002-10-27
  • 打赏
  • 举报
回复
给分了,虽然没有搞明白
知足常乐 2002-10-26
  • 打赏
  • 举报
回复
你看看我贴出的代码就知道了阿。

在调用Singleton.getInstance();时会创建唯一的实例。

若Singleton的实例还不存在,Singleton.getInstance();就创建唯一的实例;
若Singleton的实例已经存在,Singleton.getInstance();就返回唯一的实例。
cxhz_cn 2002-10-26
  • 打赏
  • 举报
回复
你们好像理解错了,我的意思是

private static Singleton instance = new Singleton();
是在啥时候执行的

一般即使static变量也要在new Singleton();后才被初始话的,现在并没有对
new Singleton(),那么static Singleton instance 怎么会被init
sun1979song 2002-10-26
  • 打赏
  • 举报
回复
呵呵,楼主,每个类会有一些static的成员,当类加载时,jvm会执行这个类的静态初始化过程
private static Singleton instance = new Singleton();这一句属于静态初始化过程里的一步,自然被执行。

知足常乐 2002-10-25
  • 打赏
  • 举报
回复
若对其它模式也感兴趣,请连接:

http://www.pigtwo.com/forum/list.asp?boardid=11

里面收藏了很多模式的示例代码。
知足常乐 2002-10-25
  • 打赏
  • 举报
回复
Singleton(单件) 对象创建型模式,其意图是保证一个类在应用中只有一个实例,并提供一个访问它的全局点。

这个模式比较简单,可能大家的应用中也常用到它,实现起来也很简单。

源码如下:

Singleton.java 实现(单件)应用的类

public class Singleton {
private static Singleton instance; // 唯一的实例变量

//保证外部其他类不能通过构造器实例化此类
protected Singleton() {
System.out.println("Singleton's Construct() Method is Called.");
}

//关键方法,外部类只能通过此方法获取类实例
public static Singleton getInstance() {

//判断唯一的类实例是否已经创建
if (instance == null) {
instance = new Singleton();
}

return instance;
}

public void operation() {
System.out.println("Singleton.operation() executing" );
}

}

测试程序,Client.java

public class Client {
public static void (String[] args) {
//可以看到创建2个Singleton对象时,
//只有在最初的对象创建时有一个打印输出
Singleton theSingleton1 = Singleton.getInstance();
Singleton theSingleton2= SingleTon.getInstance();

theSingleton1.operation();
theSingleton2.operation();
}
}


t 2002-10-25
  • 打赏
  • 举报
回复
class被classloader load的时候

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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