java的new關鍵字想必大家都知道這是執行個體化一個對象。沒錯,也是為新對象配置設定記憶體空間。
比如new MyDate(22,7,1964)這樣一個案例,他的完成需要四部:
一。為新對象配置設定記憶體空間,将MyDate存儲到堆。
二。執行顯示的初始化
三。執行構造器。new方法中括号參數傳遞給構造器,出書話該對象數值
四。該變量被指派為堆記憶體中新對象的引用
通俗的說,你new的操作,實際上是在記憶體的堆中新添加一個new的對象并且通過構造方法初始化這個新對象并且在棧中存放該對象的引用
下面我有一個案例,通俗易懂那種:
public classPet {protected bean be = this.b();publicbean b(){return newbean();
}
}
public voidtest(){
be.setName("張三");
}public voidtest2(){
System.out.println(be.getName());
}public static voidmain(String[] args) {
People pe= newPeople();
pe.test();
pe.test2();
}
一個父類,一個子類,通過test給name指派,test2輸出值你會發現輸出的正事test給name的指派,因為在運作main方法時,程式會先編譯父類并且執行個體化be對象,是以子類中的引用都是同一個對象,但是如果修改為下面代碼這種:
public voidtest(){
bean be= newbean();
be.setName("張三");
}public voidtest2(){
System.out.println(be.getName());
}public static voidmain(String[] args) {
People pe= newPeople();
pe.test();
pe.test2();
}
在test中我新new了一個be對象,這樣的輸出是null,因為他們在記憶體棧中存放的引用是不一樣,在實際編碼的過程中,引用比較多的對象最好在父類中寫好,子類繼承,或者寫成java的單利懶漢模式:
public classDanLi1class {//1.要想實作單利模式,必須修改其構造方法()
privateDanLi1class(){
}//2.首先自己先執行個體化該執行個體
private static DanLi1class dan1 = newDanLi1class();//3.為保證别的程式通路到該執行個體的執行個體華對象,需要定義一個靜态方法
public staticDanLi1class danli1(){returndan1;
}
}
這樣會節省記憶體占用,使得對象能夠重複使用,何樂而不為呢。