public class Dog{public Dog(){super();}}
1、建立對象有什麼難的,我們new一個就是的………………對,沒錯,這隻是其中一種
Dog jack = new Dog();
2、利用class的反射機制,該種方式適用於有無參構造方法的
Class dogClass = Dog.class; //拿到class Dog的 Class執行個體對象Dog rose = (Dog) dogClass.newInstance(); //調用Class的執行個體方法 newInstance()建立Dog的執行個體對象
Class dogClass = Class.forName("Dog");Dog rose = (Dog) dogClass.newInstance();
3、利用java的對象,可序列化(對象在記憶體中的分配方式,在本地裡儲存一份一模一樣的看,然後再取出來用,相當於把一個對象的狀態完全儲存住了,挺牛逼的啊,是不是遊遊戲裡經常這麼搞),利用封裝類:ObjectOutputStream,ObjectInputStream。
前提:該類必須實現介面Serializable
public class CreateFour implements Serializable {public static void main(String args[]) {CreateFour fCreateFour = new CreateFour();ObjectOutputStream objectStream;try {objectStream = new ObjectOutputStream(new FileOutputStream("res/obj.txt"));objectStream.writeObject(fCreateFour);ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("res/obj.txt"));CreateFour cloneFour = (CreateFour) objectInputStream.readObject();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
4、利用Object下執行個體方法clone(),該類必須實現Cloneable介面,不然會拋出異常CloneNotSupportedException
public class CreateFour implements Cloneable {public static void main(String args[]) {CreateFour f = new CreateFour();try {CreateFour cloneObject = (CreateFour) f.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
5、總結
答:好啦,建立對象的4種方式,夥伴們都知道了………… 利用物件流程,還是利用clone(),都會開闢新的記憶體空間,就是在jvm中的堆記憶體複製一個與來源物件相同的新的對象(千萬不要以為舊引用與新引用對應的是同一個對象哦)