前言
做爲Java開發者,咱們天天建立不少對象,但咱們一般使用依賴管理系統,好比Spring去建立對象。然而這裏有不少建立對象的方法,咱們會在這篇文章中學到。框架
五種方法
方法 | 是否使用構造函數 |
---|---|
使用new關鍵字 | 調用了構造函數 |
使用Class類的newInstance方法 | 調用了構造函數 |
使用Constructor類的newInstance方法 | 調用了構造函數 |
使用clone方法 | 沒有調用構造函數 |
使用反序列化 | 沒有調用構造函數 |
1、使用new關鍵字
這是最多見也是最簡單的建立對象的方式了。經過這種方式,咱們能夠調用任意的構造函數(無參的和帶參數的)。jvm
person person = new person("aaa", 121);
2、使用Class類的newInstance方法
咱們也可使用Class類的newInstance方法建立對象。這個newInstance方法調用無參的構造函數建立對象。ide
咱們能夠經過下面方式調用newInstance方法建立對象:函數
Person person = (Person) Class.forName("建立對象的五種方法.Person").newInstance(); System.out.println(person);
或者是這樣的:code
// 這樣使用須要 寫一個無參的構造方法,否則報異常 Person person = Person.class.newInstance(); System.out.println(person);
3、使用Constructor類的newInstance方法
// TODO Auto-generated method stub Constructor<Person> constructor = Person.class.getConstructor(); Person person = constructor.newInstance(); System.out.println(person.name);
newInstance方法內部調用Constructor的newInstance方法。這也是衆多框架,如Spring、Hibernate、Struts等使用後者的緣由。對象
4、使用close()方法
不管什麼時候咱們調用一個對象的clone方法,jvm就會建立一個新的對象,將前面對象的內容所有拷貝進去。用clone方法建立對象並不會調用任何構造函數。接口
(重寫clone方法時,咱們也要注意對於引用對象,使用的是深拷貝仍是淺拷貝方法)
要使用clone方法,咱們須要先實現Cloneable接口並實現其定義的clone方法。開發
// TODO Auto-generated method stub Person p1 = new Person(); Person p2 = (Person)p1.clone(); Person p3 = p1; System.out.println(p1 == p2); System.out.println(p1 == p3);
5、使用反序列化
當咱們序列化和反序列化一個對象,jvm會給咱們建立一個單獨的對象。由於這些操做都是發生在JVM平臺上的,因此 jvm建立對象並不會調用任何構造函數get