標籤:blog java os div ar new log 程式
/*如何保證對象的唯一性: 1.不允許其他程式用new來建立該類對象。 2.在該類建立一個本類執行個體。 3.對外提供一個方法讓其他程式可以擷取該對象的引用。*/public class Test{ public static void main(String[] args){ //Subject sub = Subject.oSub;//這種方法不可控,一般不訪問成員 Subject sub = Subject.getInstance();//我們可以在方法中增加條件,根據條件是否返回對象的引用,增加程式的可控性! new Student().show(sub); new Teacher().show(sub); }}class Subject{ public String sub;public static Subject oSub = new Subject();private Subject(){ sub = "電腦科學與技術";}public static Subject getInstance(){ //oSub = new Subject();//if(****) 增加 if 判斷 可以 增加程式的可控性return oSub;}public String getSubject(){return sub;}public void setSubjcet(String name){ sub = name;}}/* 靜態成員變數和普通成員變數的顯示初始化的不同之處: 以下面的例子為例: 靜態變數的顯示初始化編譯之後不會放進 建構函式中!(想一想啊,如果放進了建構函式中,那不就是產生對象了嗎?那可能嗎? 它是靜態,是屬於類的!普通成員變數是屬於對象的,所以顯示初始化會放進建構函式中)所以不會使建構函式一直調用,最終棧溢出 而普通成員變數的顯示初始化編譯之後回放進建構函式中, 這樣就會導致建構函式一直被反覆調用! class Subject{ public String sub;//public Subject ss = new Subject();public static Subject oSub = new Subject();//惡漢式 //public static Subject oSub = null;//懶漢式private Subject(){ //oSub = new Subject();//oSub是靜態變數,加上這一句就會導致oSub顯示初始化時棧溢出! sub = "電腦科學與技術";}public static Subject getSubject(){ return oSub; //return oSub = new Subject();}}*/class Student{ public void show(Subject sub){ System.out.println(sub.sub);}}class Teacher{ public void show(Subject sub){ System.out.println(sub.sub);}}