淺析Java中的 new 關(guān)鍵字
java的new關(guān)鍵字想必大家都知道這是實例化一個對象。沒錯,也是為新對象分配內(nèi)存空間。
比如new MyDate(22,7,1964)這樣一個案例,他的完成需要四部:
一。為新對象分配內(nèi)存空間,將MyDate存儲到堆。
二。執(zhí)行顯示的初始化
三。執(zhí)行構(gòu)造器。new方法中括號參數(shù)傳遞給構(gòu)造器,出書話該對象數(shù)值
四。該變量被賦值為堆內(nèi)存中新對象的引用
通俗的說,你new的操作,實際上是在內(nèi)存的堆中新添加一個new的對象并且通過構(gòu)造方法初始化這個新對象并且在棧中存放該對象的引用
下面我有一個案例,通俗易懂那種:
public class Pet {
protected bean be = this.b();
public bean b(){
return new bean();
}
}
public void test(){
be.setName("張三");
}
public void test2(){
System.out.println(be.getName());
}
public static void main(String[] args) {
People pe = new People();
pe.test();
pe.test2();
}
一個父類,一個子類,通過test給name賦值,test2輸出值你會發(fā)現(xiàn)輸出的正事test給name的賦值,因為在運(yùn)行main方法時,程序會先編譯父類并且實例化be對象,所以子類中的引用都是同一個對象,但是如果修改為下面代碼這種:
public void test(){
bean be = new bean();
be.setName("張三");
}
public void test2(){
System.out.println(be.getName());
}
public static void main(String[] args) {
People pe = new People();
pe.test();
pe.test2();
}
在test中我新new了一個be對象,這樣的輸出是null,因為他們在內(nèi)存棧中存放的引用是不一樣,在實際編碼的過程中,引用比較多的對象最好在父類中寫好,子類繼承,或者寫成java的單利懶漢模式:
public class DanLi1class {
//1.要想實現(xiàn)單利模式,必須修改其構(gòu)造方法()
private DanLi1class(){
}
//2.首先自己先實例化該實例
private static DanLi1class dan1 = new DanLi1class();
//3.為保證別的程序訪問到該實例的實例華對象,需要定義一個靜態(tài)方法
public static DanLi1class danli1(){
return dan1;
}
}
這樣會節(jié)省內(nèi)存占用,使得對象能夠重復(fù)使用,何樂而不為呢。
相關(guān)文章
java 中InputStream,String,File之間的相互轉(zhuǎn)化對比
這篇文章主要介紹了java 中InputStream,String,File之間的相互轉(zhuǎn)化對比的相關(guān)資料,需要的朋友可以參考下2017-04-04
SpringBoot 開發(fā)提速神器 Lombok+MybatisPlus+SwaggerUI
這篇文章主要介紹了SpringBoot 開發(fā)提速神器 Lombok+MybatisPlus+SwaggerUI,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Spring FactoriesLoader機(jī)制實例詳解
這篇文章主要介紹了Spring FactoriesLoader機(jī)制實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的示例
本篇文章主要介紹了Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

