构造方法私有化
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!!