資源描述:
《java-面向?qū)ο?基礎(chǔ)篇)--構(gòu)造方法私有化及對象數(shù)組》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學術(shù)論文-天天文庫。
1、構(gòu)造方法私有化及對象數(shù)組一.構(gòu)造方法私有化1.W題的引出類的封裝性不只體現(xiàn)迕對屬性的封裝上,實際上方法也是可以進行封裝的,當然,在方法封裝屮也包括了對構(gòu)造方法的封裝。例:classSingleton{privateSingleton(){}publicvoidprint(){System.out.println("HelloWorld!");}}從之前的講解巾可以清楚的知道,一個類想使用,則必須要有實例化的對象,現(xiàn)在要想調(diào)用Singleton炎中的printO方法則一定要首先產(chǎn)生Singleton的實例化對象,但是由于此時構(gòu)造方法被私有化了,所以如果按照如下的程序編寫,則
2、肯定會出現(xiàn)錯誤?!惧e誤代碼,直接實例化Singleton類對象】publicclassSingletonDemo02{publicstaticvoidmain(String[]args){Singletonsl=null;sl=newSingleton();si.print));}}程序運行的結(jié)果為:SingletonDemo02.java:13:錯誤:Singleton()可以在Singleton中訪問privatesl=newSingleton();1個錯誤從上述錯誤提示屮可以發(fā)現(xiàn),程序是在使川new關(guān)鍵字實例化對象吋出現(xiàn)了錯誤,而對于聲明對象則沒有任何的錯誤,那么該
3、如何解釋那?封裝足指一切外部不可見牲,那么就意味著在外部根木無法調(diào)用被封裝的構(gòu)造方法,既然外部不能調(diào)用,那么在內(nèi)部碼?【在內(nèi)部產(chǎn)生Singleton的對象】classSingleton{staticSingletoninstance=newSingleton();privateSingleton(){}publicvoidprint(){System.out.println("HelloWorld!");}}以上的程序編譯后,不會出現(xiàn)任何錯誤,對以正常的完成instance對象的實例化,即此時的問題在于如何將內(nèi)部的instance對象傳遞到類的外部,這樣外部就可以通過in
4、stance來實例化其他的Singleton的對象。那么對象到底該如何?。?.問題的解決在前面講解static關(guān)鍵字時齊經(jīng)講過,static類型的屬性可以山類名稱直接調(diào)用,所以此吋可以將instance屬性聲明為static笑型,這樣就町以通過笑名稱直接調(diào)川。【將instance聲明為static類型】classSingleton{staticSingletoninstance=newSingleton();privateSingleton(){}publicvoidprint(){System.out.println("HelloWorld!");}}publiccla
5、ssSingletonDemo04{publicstaticvoidmain(String[]args){Singletonsl=null;sl=Singleton.instance;si.print));}}運行結(jié)果為:HelloWorld!山運行結(jié)果可以發(fā)現(xiàn),程序成功地取得了Singleton的實例化對象并調(diào)用了phnt()方法。但是這樣做本身也存在著問題,因為類中的屬性必須封裝,所以此處應(yīng)該將instance屬性進行封裝,而封裝后必須通過方法取得,但是因為instance屈性屈于靜態(tài)屬性,所以此處必須聲明-?個靜態(tài)方法,這樣就可以被類名稱直接調(diào)用?!臼褂渺o態(tài)方法,取
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));}}運行結(jié)果為:HelloWorld!HelloWorld!HelloWorld!1.租序的意義在以上的程序中可以發(fā)現(xiàn)雖然聲叨了3個對象,但是實際上所有的對象都只使用一個instance引用,也就是說,此時不管外而如何使用,最終結(jié)果程序屮也只柯一個Singleton類的實例化對象存在,在設(shè)計模式中稱為單例模