可以解决 用new 无法解决的问题 :(static 只占用一份存储区域)
一:只想为某特定域分配一存储空间,而不考虑要创建多少对象,甚至根本就不创建对象
二: 希望某个方法不与包含的类的任何对象关联在一起(即:没创建对象也能够调用这方法),这对定义main方法很重要,这方法是运行一个应用时的入口点
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量
和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其律属同一类型的实例群。
声明为static的方法有以下几条限制: 声明为static的方法有以下几条限制:
*它们仅能调用其他的static 方法。
*它们只能访问static数据。
*它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。
静态代码块:
一个类中可以使用不包含在任何方法体中的静态代码块(static block ),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。
类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。
单态模式设计:
所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
一般Singleton模式通常有几种形式:
public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很奇怪? private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问
|
第二种形式:
public class Singleton { private static Singleton instance = null; } |