您好,登錄后才能下訂單哦!
本篇內容介紹了“Java創建對象的方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Java是面向對象的編程語言,只要使用它,就需要創建對象。Java創建對象有六種方法,實際常用的不會這么多,這里權當是記錄一下。
(1)使用new關鍵字
Pumpkin p1 = new Pumpkin();
(2)反射之Class類newInstance()
Pumpkin p2 = Pumpkin.class.newInstance();
(3)反射之Constructor類的newInstance()
Pumpkin p3 = Pumpkin.class.getDeclaredConstructor().newInstance();
(4)Object對象的clone方法
Pumpkin p4 = (Pumpkin) p1.clone();
注意Object類的clone方法是protected的,在Override的時候,可以改成public,這樣讓其它所有類都可以調用。
注意淺拷貝和深拷貝。
在這里小編建了一個前端學習交流扣扣群:132667127,我自己整理的最新的前端資料和高級開發教程,如果有想需要的,可以加群一起學習交流
(5)反序列化
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"));
oos.writeObject(p1);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"));
Pumpkin p5 = (Pumpkin) ois.readObject();
ois.close();
必須要實現Serializable接口;
需要注意哪些字段可序列化,哪些字段不會被序列化,如何控制;
注意serialVersionUID的作用;
了解Externalizable的不同之處。
(6)使用Unsafe類
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
Pumpkin p6 = (Pumpkin) unsafe.allocateInstance(Pumpkin.class);
很少用的方法,一般不用了解這個方法。
示例代碼如下:
package com.pkslow.basic;
import sun.misc.Unsafe;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class CreateObject {
public static class Pumpkin implements Cloneable, Serializable {
public Pumpkin(){
System.out.println("Constructor called");
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, CloneNotSupportedException, IOException, ClassNotFoundException, NoSuchFieldException {
System.out.println("---start---");
System.out.println("(1) new");
Pumpkin p1 = new Pumpkin();
System.out.println("(2) Class newInstance");
Pumpkin p2 = Pumpkin.class.newInstance();
System.out.println("(3) Constructor newInstance");
Pumpkin p3 = Pumpkin.class.getDeclaredConstructor().newInstance();
System.out.println("(4) clone");
Pumpkin p4 = (Pumpkin) p1.clone();
System.out.println("(5)Serialization");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"));
oos.writeObject(p1);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"));
Pumpkin p5 = (Pumpkin) ois.readObject();
ois.close();
System.out.println("(6) Unsafe");
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
Pumpkin p6 = (Pumpkin) unsafe.allocateInstance(Pumpkin.class);
System.out.println("---end---");
}
}
輸出結果如下:
---start---
(1) new
Constructor called
(2) Class newInstance
Constructor called
(3) Constructor newInstance
Constructor called
(4) clone
(5)Serialization
(6) Unsafe
---end---
所以會執行構造函數的有:new關鍵字、兩種反射;
不會執行構造函數的有:clone、序列化、Unsafe類。
“Java創建對象的方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。