一、使用new關(guān)鍵字
這是我們最常見的也是最簡(jiǎn)單的創(chuàng)建對(duì)象的方式,通過這種方式我們還可以調(diào)用任意的構(gòu)造函數(shù)(無參的和有參的)。
例如:
User user = new User();
二、使用反射機(jī)制
運(yùn)用反射手段,調(diào)用Java.lang.Class
或者java.lang.reflect.Constructor
類的newInstance()
實(shí)例方法。
相關(guān)視頻教程分享:java教學(xué)視頻
1、使用Class類的newInstance方法
可以使用Class類的newInstance方法創(chuàng)建對(duì)象。這個(gè)newInstance方法調(diào)用無參的構(gòu)造函數(shù)創(chuàng)建對(duì)象。
//創(chuàng)建方法1 User user = (User)Class.forName("根路徑.User").newInstance(); //創(chuàng)建方法2(用這個(gè)最好) User user = User.class.newInstance();
2、使用Constructor類的newInstance方法
和Class類的newInstance方法很像, java.lang.reflect.Constructor類里也有一個(gè)newInstance方法可以創(chuàng)建對(duì)象。我們可以通過這個(gè)newInstance方法調(diào)用有參數(shù)的和私有的構(gòu)造函數(shù)。
Constructor<User> constructor = User.class.getConstructor(); User user = constructor.newInstance();
這兩種newInstance方法就是大家所說的反射。事實(shí)上Class的newInstance方法內(nèi)部調(diào)用Constructor的newInstance方法。
三、使用clone方法
無論何時(shí)我們調(diào)用一個(gè)對(duì)象的clone方法,jvm就會(huì)創(chuàng)建一個(gè)新的對(duì)象,將前面對(duì)象的內(nèi)容全部拷貝進(jìn)去。用clone方法創(chuàng)建對(duì)象并不會(huì)調(diào)用任何構(gòu)造函數(shù)。
要使用clone方法,我們需要先實(shí)現(xiàn)Cloneable接口并實(shí)現(xiàn)其定義的clone方法。
例如:
public class CloneTest implements Cloneable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public CloneTest(String name, int age) { super(); this.name = name; this.age = age; } public static void main(String[] args) { try { CloneTest cloneTest = new CloneTest("wangql",18); CloneTest copyClone = (CloneTest) cloneTest.clone(); System.out.println("newclone:"+cloneTest.getName()); System.out.println("copyClone:"+copyClone.getName()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } }
執(zhí)行:
newclone:wangql copyClone:wangql
四、使用反序列化
當(dāng)我們序列化和反序列化一個(gè)對(duì)象,jvm會(huì)給我們創(chuàng)建一個(gè)單獨(dú)的對(duì)象。在反序列化時(shí),jvm創(chuàng)建對(duì)象并不會(huì)調(diào)用任何構(gòu)造函數(shù)。
為了反序列化一個(gè)對(duì)象,我們需要讓我們的類實(shí)現(xiàn)Serializable接口。
相關(guān)文章教程分享:java快速入門