new 操作符的本意是分配記憶體。程式執行到 new 操作符時,首先去看 new 操作符後面的型別,因為知道了型別,才能知道要分配多大的記憶體空間。分配完記憶體之後,再呼叫建構函式,填充物件的各個域,這一步叫做物件的初始化,構造方法返回後,乙個物件建立完畢,可以把他的引用(位址)發布到外部,在外部就可以使用這個引用操縱這個物件。
clone 在第一步是和 new 相似的,都是分配記憶體,呼叫 clone 方法時,分配的記憶體和原物件 (即呼叫 clone 方法的物件)相同,然後再使用原物件中對應的各個域,填充新物件的域,填 充完成之後,clone方法返回,乙個新的相同的物件被建立,同樣可以把這個新物件的引用發布到外部。
區別總結:
clone()不會呼叫構造方法;new會呼叫構造方法
clone()更快。clone()能快速建立乙個已有物件的副本,即建立物件並且將已有物件中所有屬性值轉殖;new只能在jvm中申請乙個空的記憶體區域,物件的屬性值要通過構造方法賦值
new乙個物件的過程
class a public void a string name,int age class b 執行順序 1 因為new用到了 a.class,所以會先找到a.class檔案並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給a.class類進行初始化。3 在堆記憶體中開闢空間,分...
new乙個物件的過程
1.靜態 塊 2.預設初始化 3.構造 塊 4.構造方法 靜態 塊先執行,構造 塊執行,物件內執行 class person static public class persondemo2 執行結果 列印 靜態 塊1 構造 塊2 建構函式3 class a public void a string ...
new乙個物件的過程
使用new關鍵字呼叫函式 new classa 的具體步驟 1.建立空物件 var obj 2.設定新物件的constructor屬性為建構函式的名稱,設定新物件的 proto 屬性指向建構函式的prototype物件 obj.proto classa.prototype 3.使用新物件呼叫函式,函...