更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        教程|Java中創建對象的5種方式

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2017-10-27 15:14

        作為 Java 開發者,我們每天創建很多對象,但我們通常使用依賴管理系統,比如spring 去創建對象。然而這里有很多創建對象的方法,我們會在這篇文章中學到。

        Java 中有5種創建對象的方式,下面給出它們的例子還有它們的字節碼

        教程|Java中創建對象的5種方式

        如果你運行了末尾的的程序,你會發現方法1、2、3用構造函數創建對象,方法4、5沒有調用構造函數。

        1.使用 new 關鍵字

        這是最常見也是最簡單的創建對象的方式了。通過這種方式,我們可以調用任意的構造函數(無參的和帶參數的)。

        教程|Java中創建對象的5種方式

        教程|Java中創建對象的5種方式

        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;

        3.使用Constructor類的newInstance方法

        和 Class 類的 newInstance 方法很像, java.lang.reflect.Constructor 類里也有一個 ewInstance 方法可以創建對象。

        我們可以通過這個 newInstance 方法調用有參數的和私有的構造函數。

        Constructor constructor = Employee.class.getConstructor();

        Employee emp3 = constructor.newInstance();

        111: invokevirtual #80 // Method java/lang/reflect/Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;

        這兩種 newInstance 方法就是大家所說的反射。事實上 Class 的 newInstance 方法內部調用 Constructor 的 ewInstance 方法。

        這也是眾多框架,如 spring、hibernate、Struts 等使用后者的原因。

        4.使用clone方法

        無論何時我們調用一個對象的 clone 方法,jvm 就會創建一個新的對象,將前面對象的內容全部拷貝進去。

        用 clone 方法創建對象并不會調用任何構造函數。

        要使用 clone 方法,我們需要先實現 Cloneable 接口并實現其定義的 clone 方法。

        Employee emp4 = (Employee) emp3.clone();

        162: invokevirtual #87 // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/Object;

        5.使用反序列化

        當我們序列化和反序列化一個對象,jvm 會給我們創建一個單獨的對象。

        在反序列化時,jvm 創建對象并不會調用任何構造函數。

        為了反序列化一個對象,我們需要讓我們的類實現 Serializable 接口

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));

        Employee emp5 = (Employee) in.readObject();

        261: invokevirtual #118 // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object;

        我們從上面的字節碼片段可以看到,除了第1個方法,其他4個方法全都轉變為 invokevirtual (創建對象的直接方法),第一個方法轉變為兩個調用,new 和 invokespecial (構造函數調用)。

        例子

        讓我們看一看為下面這個 Employee 類創建對象:

        教程|Java中創建對象的5種方式 教程|Java中創建對象的5種方式

        下面的 Java 程序中,我們將用 5 種方式創建 Employee 對象。

        教程|Java中創建對象的5種方式 教程|Java中創建對象的5種方式

        程序會輸出:

        教程|Java中創建對象的5種方式

        感謝大家閱讀由java培訓機構分享的“教程|Java中創建對象的5種方式”希望對大家有所幫助,更多精彩內容請關注Java培訓官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:Java工程師為何如此火爆?
        下一篇:教程|Java多線程建立方式
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>