1. 程式人生 > >Java中建立物件的方式有幾種?

Java中建立物件的方式有幾種?

建立物件的方式
方式 是否呼叫了建構函式
使用new關鍵字
使用Class類的newInstance方法
使用Constructor類的newInstance方法
使用clone方法
使用反序列化

1.使用new關鍵字

這是最常見也是最簡單的建立物件的方式了。通過這種方式,我們可以呼叫任意的建構函式(無參的和帶引數的)。

Student s = new Student();

2.使用Class類的newInstance方法

我們也可以使用Class類的newInstance方法建立物件。這個newInstance方法呼叫無參的建構函式建立物件。

Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
或者

Employee emp2 = Employee.class.newInstance();

 3.使用Constructor類的newInstance方法

和Class類的newInstance方法很像, java.lang.reflect.Constructor類裡也有一個newInstance方法可以建立物件。我們可以通過這個newInstance方法呼叫有引數的和私有的建構函式。

Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();

這兩種newInstance方法就是大家所說的反射。事實上Class的newInstance方法內部呼叫Constructor的newInstance方法。

4.使用clone方法

無論何時我們呼叫一個物件的clone方法,jvm就會建立一個新的物件,將前面物件的內容全部拷貝進去。用clone方法建立物件並不會呼叫任何建構函式。

要使用clone方法,我們需要先實現Cloneable介面並實現其定義的clone方法。

Employee emp4 = (Employee) emp3.clone();

5.使用反序列化

當我們序列化和反序列化一個物件,jvm會給我們建立一個單獨的物件。在反序列化時,jvm建立物件並不會呼叫任何建構函式。 為了反序列化一個物件,我們需要讓我們的類實現Serializable介面。

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();