构造方法私有化
1.问题的引入
类的封装性不只体现在对属性的封装上,实际上方法也是可以被封装的,当然,在方法封装中也包含了对构造方法的封装。一下就是对构造方法进行了封装.
package test8;
class Singleton {
static Singleton instance = new Singleton(); // 在内部产生本类的实例化
private Singleton() { // 此处将构造方法进行封装
}
public void print() { // 输出信息
System.out.println("hello word!!");
}
}
class test1 {
public static void main(String args[]) {
Singleton s1 = null;
s1 = Singleton.instance; // 访问类中的静态属性
s1.print();
}
}
结果
hello word!!
由运行结果可以发现,程序成功取得了Singleton的实例化对象并调用了其中的print()方法,但是这样做本身也存在这问题,因为类中的属性必须封装,所以此处应该将instance属性进行封装,而封装之后必须通过方法取得,但因为instance属性属于静态属性,所以在此处必须声明一个静态方法,这样就可以被类名直接调用。
package test8;
class Singleton {
private static Singleton instance = new Singleton(); // 在内部产生本类的实例化
private Singleton() { // 此处将构造方法进行封装
}
public static Singleton getInstance()// 通过静态方法取得Singleton类的实例
{
return instance;
}
public void print() { // 输出信息
System.out.println("hello word!!");
}
}
class test1 {
public static void main(String args[]) {
Singleton s1 = Singleton.getInstance(); // 访问类中的静态方法取得对象实例
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
s1.print();
s2.print();
s3.print();
}
}
结果
hello word!!
hello word!!
hello word!!
浙公网安备 33010602011771号