使用new關鍵字? ? ?
? ? ?使用new關鍵字是創(chuàng)建對象的最基本方法漱竖。這是在java中創(chuàng)建對象的最常見方法士鸥。幾乎99%的對象都是用這種方式創(chuàng)建的闲孤。通過使用這個方法烤礁,我們可以調用任何想要調用的構造函數(shù)(沒有參數(shù)或參數(shù)化的構造函數(shù))。
package org.cfj.objcreate;
public class NewKeywordEx {
String name="NewKeyCreateObj";
public static void main(String[]args) {
NewKeywordEx newKeywordEx=new NewKeywordEx();
System.out.println(newKeywordEx.name);
}
}
使用New Instance
? ? ? 使用new instance:如果我們知道類的名稱肥照,并且它具有公共默認構造函數(shù),則可以創(chuàng)建一個對象–Class.forName舆绎。 我們可以使用它來創(chuàng)建類的對象鲤脏。 實際上吕朵,Class.forName使用Java加載了Class猎醇,但沒有創(chuàng)建任何Object。 要創(chuàng)建該類的對象硫嘶,您必須使用該類的新實例方法。
package org.cfj.objcreate;
public class NewInstanceEx {
String name = "newInstanceEx";
public static void main(String[]args)throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class cl = Class.forName("org.cfj.objcreate.NewInstanceEx");
NewInstanceEx newInstanceEx = (NewInstanceEx)cl.newInstance();
System.out.println(newInstanceEx.name);
}
}
使用Clone
? ?每當在任何對象上調用clone()時梧税,JVM實際上會創(chuàng)建一個新對象,并將前一個對象的所有內容復制到其中第队。使用克隆方法創(chuàng)建對象不會調用任何構造函數(shù)哮塞。要在對象上使用clone()方法凳谦,我們需要實現(xiàn)Cloneable并在其中定義clone()方法忆畅。
package org.cfj.objcreate;
public class cloneEx implements Cloneable {
@Override
? ? protected Object clone()throws CloneNotSupportedException {
return super.clone();
}
private String name = "cloneEx";
CloneExModel cloneExModel = new CloneExModel("張三", "123");
public static void main(String[]args)throws ClassNotFoundException, IllegalAccessException, InstantiationException, CloneNotSupportedException {
cloneEx cloneEx = new cloneEx();
cloneEx cloneEx1 = (cloneEx)cloneEx.clone();
cloneEx1.name = "cloneEx1";
System.out.println(cloneEx.name);//輸出:cloneEx
? ? ? ? System.out.println(cloneEx1.name);//輸出:cloneEx1
? ? ? ? System.out.println(cloneEx == cloneEx1);//輸出:false
? ? ? ? cloneEx1.cloneExModel.setUserName("張三clone");
System.out.println(cloneEx.cloneExModel.getUserName());//輸出:張三
? ? ? ? System.out.println(cloneEx1.cloneExModel.getUserName());//輸出:張三
? ? }
}
Note:
?這里我們創(chuàng)建的是現(xiàn)有對象的克隆尸执,而不是任何新對象家凯。
?類需要實現(xiàn)Cloneable接口眠屎,否則將拋出CloneNotSupportedException肆饶。