欢迎来到天天文库
浏览记录
ID:20439726
大小:52.05 KB
页数:5页
时间:2018-10-12
《java-面向对象(基础篇)--构造方法私有化及对象数组》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、构造方法私有化及对象数组一.构造方法私有化1.W题的引出类的封装性不只体现迕对属性的封装上,实际上方法也是可以进行封装的,当然,在方法封装屮也包括了对构造方法的封装。例:classSingleton{privateSingleton(){}publicvoidprint(){System.out.println("HelloWorld!");}}从之前的讲解巾可以清楚的知道,一个类想使用,则必须要有实例化的对象,现在要想调用Singleton炎中的printO方法则一定要首先产生Singleton的实例化对象,但是由于此时构造方法被私有化了,所以如果按照如下的程序编写,则
2、肯定会出现错误。【错误代码,直接实例化Singleton类对象】publicclassSingletonDemo02{publicstaticvoidmain(String[]args){Singletonsl=null;sl=newSingleton();si.print));}}程序运行的结果为:SingletonDemo02.java:13:错误:Singleton()可以在Singleton中访问privatesl=newSingleton();1个错误从上述错误提示屮可以发现,程序是在使川new关键字实例化对象吋出现了错误,而对于声明对象则没有任何的错误,那么该
3、如何解释那?封裝足指一切外部不可见牲,那么就意味着在外部根木无法调用被封裝的构造方法,既然外部不能调用,那么在内部码?【在内部产生Singleton的对象】classSingleton{staticSingletoninstance=newSingleton();privateSingleton(){}publicvoidprint(){System.out.println("HelloWorld!");}}以上的程序编译后,不会出现任何错误,对以正常的完成instance对象的实例化,即此时的问题在于如何将內部的instance对象传递到类的外部,这样外部就可以通过in
4、stance來实例化其他的Singleton的对象。那么对象到底该如何取?1.问题的解决在前面讲解static关键字时齊经讲过,static类型的属性可以山类名称直接调用,所以此吋可以将instance属性声明为static笑型,这样就町以通过笑名称直接调川。【将instance声明为static类型】classSingleton{staticSingletoninstance=newSingleton();privateSingleton(){}publicvoidprint(){System.out.println("HelloWorld!");}}publiccla
5、ssSingletonDemo04{publicstaticvoidmain(String[]args){Singletonsl=null;sl=Singleton.instance;si.print));}}运行结果为:HelloWorld!山运行结果可以发现,程序成功地取得了Singleton的实例化对象并调用了phnt()方法。但是这样做本身也存在着问题,因为类中的属性必须封装,所以此处应该将instance属性进行封装,而封装后必须通过方法取得,但是因为instance屈性屈于静态属性,所以此处必须声明-•个静态方法,这样就可以被类名称直接调用。【使用静态方法,取
6、得Singleton类的实例】classSingleton{privatestaticSingletoninstance=newSingleton();privateSingleton(){}publicstaticSingletongetlnstance(){returninstance;}publicvoidprint(){System.out.println(nHelloWorld!}}publicclassSingletonDemo05{publicstaticvoidmain(String[]args){Singletonsl=Singleton.getlnst
7、ance();Singletons2=Singleton.getlnstance();Singletons3=Singleton.getlnstance();si.print));s2.print();s3.print));}}运行结果为:HelloWorld!HelloWorld!HelloWorld!1.租序的意义在以上的程序中可以发现虽然声叨了3个对象,但是实际上所有的对象都只使用一个instance引用,也就是说,此时不管外而如何使用,最终结果程序屮也只柯一个Singleton类的实例化对象存在,在设计模式中称为单例模
此文档下载收益归作者所有