【轉】Java中建立物件的5種方式
作為Java開發者,我們每天建立很多物件,但我們通常使用依賴管理系統,比如Spring去建立物件。然而這裡有很多建立物件的方法,我們會在這篇文章中學到。
Java中有5種建立物件的方式:
- 使用new關鍵字
這是最常見也是最簡單的建立物件的方式了。通過這種方式,我們可以呼叫任意的建構函式(無參的和帶引數的)。
Employee emp1 = new Employee();
0: new #19 // class org/programming/mitra/exercises/Employee
3: dup
4: invokespecial #21 // Method org/programming/mitra/exercises/Employee.”“:()V
- 使用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;
- 使用Constructor類的newInstance方法
和Class類的newInstance方法很像, java.lang.reflect.Constructor類裡也有一個newInstance方法可以建立物件。我們可以通過這個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的newInstance方法。這也是眾多框架,如Spring、Hibernate、Struts等使用後者的原因。
- 使用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;
- 使用反序列化
當我們序列化和反序列化一個物件,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(建構函式呼叫)。
以上為轉載內容。
【總監】十二春秋之,[email protected];
【Master】zelo,[email protected];【運營】運維艄公,[email protected];
【產品設計】流浪貓,[email protected];【體驗設計】兜兜,[email protected];
【iOS】淘碼小工,[email protected];iMcG33K,[email protected];
【Android】人猿居士,[email protected];思路的頓悟,[email protected];
【Java】首席工程師MR_W,[email protected];【測試】土鏡問道,[email protected];
【資料】fox009521,[email protected];【安全】保密,你懂的。
相關推薦
【轉】Java中建立物件的5種方式
作為Java開發者,我們每天建立很多物件,但我們通常使用依賴管理系統,比如Spring去建立物件。然而這裡有很多建立物件的方法,我們會在這篇文章中學到。 Java中有5種建立物件的方式: 使用new關鍵字 這是最常見也是最簡單的建立物件的方式了。通
【轉】java中堆的排序
Java實現堆排序(大根堆) 堆排序是一種樹形選擇排序方法,它的特點是:在排序的過程中,將array[0,...,n-1]看成是一顆完全二叉樹的順序儲存結構,利用完全二叉樹中雙親節點和孩子結點之間的內在關係,在當前無序區中選擇關鍵字最大(最小)的元素。 1. 若array[0,...,n
【轉】java中輸出異常資訊
做java開發的時候,經常會遇到程式碼拋異常後,需要把異常資訊儲存到資料庫或者上傳到雲伺服器做cache分析。這時候就需要獲取異常的堆疊資訊(詳細錯誤資訊)。 有的人用e.getMessage()來獲取異常資訊,但是這樣獲取到的資訊內容並不全,而且有時候為空。我們可以用下面方法來獲取。 
【轉】Java中的static關鍵字解析
一、static關鍵字的用途 在《Java程式設計思想》P86頁有這樣一段話: “static方法就是沒有this的方法。在static方法內部不能呼叫非靜態方法,反過來是可以的。而且可以在沒有建立任何物件的前提下,僅僅通過類本身來呼叫static方法。這實際上正式static方法的主要用途。”
【轉】java list按照 物件 指定多個欄位屬性進行排序
話不多說,上程式碼: package PjectUtils; import java.lang.reflect.Field; import java.text.NumberFormat; import java.util.Collections; import java
【轉】JAVA中Cookie MaxAge屬性及其使用
轉自:http://hi.baidu.com/suofang/item/06ea24ba63a7dceb4fc7fd17API文件中對MaxAge的描述:public void setMaxAge(int expiry)Sets the maximum age of the cookie in seconds
【轉】java 線程的幾種狀態
out ref 一行 locked pri 千萬 圖片 分享 直接 java thread的運行周期中, 有幾種狀態, 在 java.lang.Thread.State 中有詳細定義和說明: NEW 狀態是指線程剛創建, 尚未啟動 RUNNABLE 狀態是線程正在正常運
【Java】【JVM】Java中JVM記憶體管理 2018-10-5
Java中JVM記憶體管理 JVM記憶體劃分: ① 方法區 (執行緒共享) 常量 靜態變數 JIT(即時編譯器)編譯後代碼也在方法區存放 ② 堆記憶體(執行緒共享) 垃圾回收的主要場地 ③
【轉】Java 8中HashMap和LinkedHashMap如何解決衝突
原文來自一個java大牛的部落格 原文地址http://javarevisited.blogspot.jp/2016/01/how-does-java-hashmap-or-linkedhahsmap-handles.html 部落格講解了Java 8中HashMap和LinkedH
【轉】Java Executor框架在多執行緒應用中的使用
java平臺一直對併發程式設計和多執行緒有這很好的支援。但在早期這種支援也只是在應用層呼叫原生結構,這種方式最大的缺陷就是使這些原始構件有效的被呼叫;否則,應用將不能正確執行或者不能達到期望結果。
【Class】Java中類、例項與Class物件
文章轉載自http://www.cnblogs.com/flyme/p/4571030.html 類 類是面向物件程式語言的一個重要概念,它是對一項事物的抽象概括,可以包含該事物的一些屬性定義,以及操作屬性的方法。面向物件程式設計中,我們都是以類來編碼。
【轉】Spring 中配置sessionFactory及用法(JAVA後端)
編輯 刪除 Spring 中配置sessionFactory及用法 方法一: 1、在Spring的applicationContext.xml中配置bean <!-- 啟用註解注入 --> <context:annota
【轉】js中15個常用的正則表達式
顏色 字符 8.4 特殊字符 cnp 浮點數 == div mail 1 用戶名正則 //用戶名正則,4到16位(字母,數字,下劃線,減號) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //輸出 true console.log(uPa
【轉】java提高篇(二)-----理解java的三大特性之繼承
logs 了解 向上轉型 one 調用 adding nbsp eight 基礎 【轉】java提高篇(二)-----理解java的三大特性之繼承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在《Thi
【轉】VS2010中 C++創建DLL圖解
-a rar cls ret ria endif -s pan 項目 標簽: dllc++2010threadlibraryc 本文章已收錄於: .embody { padding: 10px 10px 10px; margin: 0 -20px; b
【轉】Java技術棧
健全 區別 hadoop let 原因 view eba pdf 觀察者 1 java基礎: 1.1 算法 1.1 排序算法:直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序、堆排序、歸並排序、基數排序 1.2 二叉查找樹、紅黑樹、B樹、B+樹、LSM樹(分別有對
1000行代碼徒手寫正則表達式引擎【1】--JAVA中正則表達式的使用
基礎上 unicode 要求 [1] 分配 find 通過 images char 簡介: 本文是系列博客的第一篇,主要講解和分析正則表達式規則以及JAVA中原生正則表達式引擎的使用。在後續的文章中會涉及基於NFA的正則表達式引擎內部的工作原理,並在此基礎上用1000行左右
【轉載】Java中Comparable和Comparator比較
import 比較器 todo itl 復制代碼 ack div array open 【本文轉自】http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 簡介 Comparable 是排序接口。 若一
【轉】用Python建立最簡單的web服務器
web服務 localhost 服務器 pos 根目錄 cal body -m -- 利用Python自帶的包可以建立簡單的web服務器。在DOS裏cd到準備做服務器根目錄的路徑下,輸入命令: python -m Web服務器模塊 [端口號,默認8000]
【轉】Java壓縮和解壓文件工具類ZipUtil
span time 其他 unzip empty del pat 列表 bis 特別提示:本人博客部分有參考網絡其他博客,但均是本人親手編寫過並驗證通過。如發現博客有錯誤,請及時提出以免誤導其他人,謝謝!歡迎轉載,但記得標明文章出處:http://www.cnblogs.