Java中建立物件的方式有幾種?
阿新 • • 發佈:2018-12-10
方式 | 是否呼叫了建構函式 |
---|---|
使用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();