前言,今日面試被問到創建對象是否一定要通過構造器,當時回答錯誤,查詢分析后記錄。
創建對象的幾種方式:
第一種,也是最常用、一直接觸到的方法:通過new 創建對象。這種方法需要用到構造器
Demo demo1=new Demo();
Demo demo2=new Demo(1,"有參構造器");
第二種,比較常用的的方法:通過反射 newInstance()創建對象。這種方法用到構造器
Demo demo2=(Demo) Class.forName("Demo").newInstance();
第三種,通過object類的clone方法。需要實現Cloneable接口,重寫object類的clone方法。無論何時我們調用一個對象的clone方法,jvm就會創建一個新的對象,將前面對象的內容全部拷貝進去。用clone方法創建對象並不會調用任何構造函數。(原型模式,還沒了解)
Demo demo4=(Demo) demo2.clone();
第四種,反序列化。java 中常常進行 JSON 數據跟 Java 對象之間的轉換,即序列化和反序列化。
當我們序列化和反序列化一個對象,JVM會給我們創建一個單獨的對象,在反序列化時,JVM創建對象並不會調用任何構造函數。為了反序列化一個對象,我們需要讓我們的類實現Serializable接口,雖然該接口沒有任何方法。不會調用任何構造函數
