- 1、JAVA創建對象有哪幾種方式 ???
- 2、java之構造和對象問題
- 3、java對象是怎麼創建出來的
JAVA創建對象的四種方式:
有4種顯式地創建對象的方式:
1.用new語句創建對象,這是最常用的創建對象的方式。
2.運用反射手段,調用Java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。
3.調用對象的clone()方法。
4.運用反序列化手段,調用java.io.ObjectInputStream對象的readObject()方法.
下面演示了用前面3種方式創建對象的過程。
以上程序的列印結果如下:
call second constructor
call default constructor
c1: name=unknown,age=0
call second constructor
c2: name=Tom,age=20
c2==c3 : false
c2.equals(c3) : true
c3: name=Tom,age=20
從以上列印結果看出,用new語句或Class對象的newInstance()方法創建Customer對象時,都會執行Customer類的構造方法,而用對象的clone()方法創建Customer對象時,不會執行Customer類的構造方法。(區別)
除了以上4種顯式地創建對象的方式以外,在程序中還可以隱含地創建對象,包括以下幾種情況:
1.對於java命令中的每個命令行參數,Java虛擬機都會創建相應的String對象,並把它們組織到一個String數組中,再把該數組作為參數傳給程序入口main(String args[])方法。
2.程序代碼中的String類型的直接數對應一個String對象,例如:
執行完以上程序,內存中實際上只有兩個String對象,一個是直接數,由Java虛擬機隱含地創建,還有一個通過new語句顯式地創建。
3.字元串操作符「+」的運算結果為一個新的String對象。例如:
4.當Java虛擬機載入一個類時,會隱含地創建描述這個類的Class實例.
1.如果當用戶沒有定義構造方法時,編譯器會為類自動添加形如類名() 的無參構造方法,但是一但自己定義了構造 方法,編譯器將不再自動添加.
也就是說構造方法不是必須有的.如果你之前一直未自定義構造方法,當你new一個對象時,系統會自動調用默認的一個無參構造方法,給你對象的實例變數賦初值,比如int型默認為0.但一旦你自己定義了構造方法並new一個對象後,你再new一個對象時系統將不再為你自動提供默認的無參構造方法,那麼你必須自己定義一個構造方法,否則編譯出錯
2 構造器可以不只一個,這叫做方法的重載
3.構造方法不但是要給對象的實例變數賦初值,更重要的是還和new一起來創建對象 ,如果你的對象沒有實例變數,當然不用給對象的實例變數賦初值,也就不需要有參的構造器.但這在實際應用中,是毫無意義的.因為沒有實例變數的對象什麼也幹不了.
1.使用new關鍵字
這是最常見也是最簡單的創建對象的方式了。通過這種方式,我們可以調用任意的構造函數(無參的和帶參數的)。
Employee emp1 = new Employee();0: new #19 // class org/programming/mitra/exercises/Employee3: dup4: invokespecial #21 // Method org/programming/mitra/exercises/Employee.””:()V
2.使用Class類的newInstance方法
我們也可以使用Class類的newInstance方法創建對象。這個newInstance方法調用無參的構造函數創建對象。
我們可以通過下面方式調用newInstance方法創建對象:
Employee emp2 = (Employee) Class.forName(“org.programming.mitra.exercises.Employee”).newInstance();
或者
Employee emp2 = Employee.class.newInstance();51: invokevirtual #70 // Method java/lang/Class.newInstance:()Ljava/lang/Object;
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126244.html