Java中建立對象的5種方式你知道幾種?

前言

做爲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

  • 序列化就是把Java序列化就是把對象轉換成字節序列,
  • 而Java反序列化就是把字節序列還原成Java對象。這都和構造函數是無關的。
相關文章
相關標籤/搜索