代码如下所示
这是一段java的单例模式的代码,通过一个共享的静态变量(instance)确实保证系统中只有一个实例,
但奇怪的是为什么成员能访问静态变量?C#可是访问不了的。
C#和java在这方面设计思想不一样?
1 public class SingletonClass{ 2 3 private static SingletonClass instance=null; 4 5 public static SingletonClass getInstance() { 6 if(instance==null) { 7 synchronized(SingletonClass.class) { 8 if(instance==null) 9 instance = new SingletonClass(); 10 } 11 } 12 return instance; 13 } 14 15 private SingletonClass() { 16 } 17 }
在Java中单例模式出现的原因是在保证唯一性不被更多实例引用创建,即隐藏构造器,调用静态方法间接的创建实例,从而保证其的唯一性,有效的封装起来,从而构成单例模式,安全性更强。你对单例的理解还有点问题。。。。
实例变量或者叫成员变量都可以访问静态成员变量,这与内存分配的先后有关系,成员变量是在创建实例后生成的,而在此之前静态变量是随类的定义生成,早于成员变量,所以后者可以访问前者,而前者在实例未生成时是无法确定成员变量的。
一般是成员可以访问静态变量,静态成员不能访问非静态变量。
C#也是可以成员访问静态变量的,包括C++也是一样。但是,静态成员不能访问非静态成员。
可以说,所有的OOP语言都是这样。
你概念弄混淆了啊
哎呦,双重锁单例啊