java class 生成对象_面向对象编程,你知道Java有哪些创建对象的方式吗?
來源:CSDN____愛敲代碼的小游子
1、用new關(guān)鍵字創(chuàng)建對象,需要使用構(gòu)造器。
new 一個對象經(jīng)過了哪些過程?
2、使用反射機(jī)制創(chuàng)建對象,用Class類或Constructor類的newInstance()方法。當(dāng)使用Class類里的newInstance()方法,調(diào)用的是無參構(gòu)造方法。
當(dāng)使用java.lang.reflect.Constructor類里的newInstance方法,調(diào)用的是有參構(gòu)造方法。
1、Class類里的newInstance()調(diào)用的是無參構(gòu)造方法
2、Constructor類的newInstance()方法調(diào)用的是有參構(gòu)造方法
3、通過object類的clone方法需要實現(xiàn)Cloneable接口,重寫object類的clone方法。無論何時我們調(diào)用一個對象的clone方法,JVM就會創(chuàng)建一個新的對象,將前面對象的內(nèi)容全部拷貝進(jìn)去。用clone方法創(chuàng)建對象并不會調(diào)用任何構(gòu)造函數(shù)。
4、使用反序列化通過ObjectInputStream的readObject()方法反序列化類當(dāng)我們序列化和反序列化一個對象,JVM會給我們創(chuàng)建一個單獨的對象。為了反序列化一個對象,我們需要讓我們的類實現(xiàn)Serializable接口。在反序列化時,JVM創(chuàng)建對象并不會調(diào)用任何構(gòu)造函數(shù)。通過反序列化生成對象的過程主要由以下幾個步驟:
1、創(chuàng)建一個對象輸入流,它可以包裝一個其他類型的源輸入流,如文件輸入流;
2、 通過對象輸入流的readObject()方法讀取對象。
序列化工具類
創(chuàng)建對象各方法的代碼
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, CloneNotSupportedException {
//1、使用關(guān)鍵字new創(chuàng)建對象(沒有參數(shù)調(diào)用無參構(gòu)造、傳入?yún)?shù)調(diào)用帶參構(gòu)造)
Girlfriend girlfriend01 = new Girlfriend();
Girlfriend girlfriend02 = new Girlfriend("y", 18);
//2、使用反射機(jī)制創(chuàng)建對象,使用Class的newInstance()調(diào)用默認(rèn)的無參構(gòu)造
Girlfriend girlfriend03 = Girlfriend.class.newInstance();
//反射機(jī)制2,調(diào)用帶參
Class> p1 = Class.forName("com.yky.Girlfriend");
Constructor> constructor = p1.getConstructor(String.class, Integer.class);
Girlfriend girlfriend04 = (Girlfriend) constructor.newInstance("k", 18);
System.out.println(girlfriend04);
//3、使用object類的clone方法
Girlfriend girlfriendClone = (Girlfriend) girlfriend04.clone();
System.out.println("girlfriendClone="+girlfriendClone);
//4、使用序列化反序列化生成對象
Girlfriend clone = ObjectUtils.clone(girlfriend04);
System.out.println("clone"+clone);
System.out.println("girlfriend04和反序列化生成的clone相等嗎");
System.out.println(clone == girlfriend04);
? ?}
總結(jié)
以上是生活随笔為你收集整理的java class 生成对象_面向对象编程,你知道Java有哪些创建对象的方式吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring MVC-表单(Form)标
- 下一篇: java deep clone util