java對象實例化的方式

java對象實例化的方式有以下幾種:
1、使用new
2、工廠模式
3、反射
4、clone()方法
5、反序列化方式

/**

  • 實現Cloneable和Serializable接口
  • */
    public class Book implements Cloneable, Serializable {
    private static final long serialVersionUID = 1L;

    private Integer serialNum; // 序列號
    private String name; // 圖書名稱

    public Book() {
    System.out.println("默認構造函數");
    }

    public Book(Integer serialNum, String name) {
    System.out.println("帶參數構造函數");
    this.serialNum = serialNum;
    this.name = name;
    }

    public int getSerialNum() {
    return serialNum;
    }
    public void setSerialNum(int serialNum) {
    this.serialNum = serialNum;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }

    @Override
    public String toString() {
    if (name == null) {
    return "書籍屬性還未填寫";
    }

    return serialNum + " : " + name;

    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
    return super.clone();
    }
    }

class BookFactory {
public static Book getInstance(Integer serialNum, String name) {
return new Book(serialNum, name);
}
}

public class Instantiation {

// 1.通過new實例化對象
public static Book newMode() {System.out.println("============================================================");System.out.println("通過new實例化對象");Book book = new Book(1, "大道揚帆");return book;
}// 2.通過工廠方式實例化對象,其本質還是new,但將實例化的細節交給了工廠來處理,屏蔽了和業務代碼無關的功能,一定程度上實現了和業務代碼的解耦
public static Book factoryMode() {System.out.println("============================================================");System.out.println("通過工廠方式實例化對象");return BookFactory.getInstance(2, "大道揚帆");
}// 3.通過反射方式實例化對象
@SuppressWarnings("rawtypes")
public static Book reflectMode() throws Exception {System.out.println("============================================================");System.out.println("通過反射方式實例化對象");Class[] parameterTypes = new Class[] {Integer.class, String.class};Constructor constructor = Book.class.getConstructor(parameterTypes);Book book = (Book) constructor.newInstance(3, "大道揚帆");return book;
}// 3-1.通過反射方式實例化對象還有一種方式,但本質上其實和上面的一樣,但需要類本身有無參構造函數
public static Book reflectAnotherMode() throws Exception {System.out.println("============================================================");System.out.println("通過反射方式實例化對象的另外一種方式");Book book = (Book) Class.forName("instantiation.Book").newInstance();return book;
}// 4.調用已存在對象的clone()方法實例化對象
public static Book cloneMode(Book book) throws Exception {System.out.println("============================================================");System.out.println("調用已存在對象的clone()方法實例化對象");Book newBook = (Book) book.clone();System.out.println("原對象和克隆對象是同一個對象嗎?" + (book == newBook));return newBook;
}// 5.對象序列化后可以通過反序列化創建對象
public static Book unSerializedMode() throws Exception {System.out.println("============================================================");System.out.println("對象序列化后可以通過反序列化創建對象");Book book = new Book(5, "大道揚帆");ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("D:/book.obj")));objectOutputStream.writeObject(book);ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("D:/book.obj")));Book newBook = (Book) objectInputStream.readObject();System.out.println("原對象和反序列化的對象是同一個嗎?" + (book == newBook));return newBook;
}public static void main(String[] args) throws Exception {System.out.println(Instantiation.newMode());System.out.println(Instantiation.factoryMode());System.out.println(Instantiation.reflectMode());System.out.println(Instantiation.reflectAnotherMode());Book book = new Book(4, "大道揚帆");System.out.println(Instantiation.cloneMode(book));System.out.println(Instantiation.unSerializedMode());
}

}

看精彩玄幻世界,盡在《大道揚帆》https://book.qidian.com/info/1012993779

轉載于:https://blog.51cto.com/13855604/2170171

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282227.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS-生成二維碼圖片【附中間帶有小圖標二維碼】(QRCode)

生成二維碼圖片也是項目中常用到的,二維碼的掃描Git上有很多好用的,這里主要說下二維碼的生成 1.普通二維碼 方法 /**生成二維碼QRStering:字符串imageFloat:二維碼圖片大小*/ (UIImage *)createQRCodeWithString:(NSString *)QRS…

libubox

lbubox是openwrt的一個核心庫,封裝了一系列基礎實用功能,主要提供事件循環,二進制格式處理,linux鏈表實現和一些JSON輔助處理。 它的目的是以動態鏈接庫方式來提供可重用的通用功能,給其他模塊提供便利和避免再造輪子。…

社區糾紛不斷:程序員何苦為難程序員

出品 | OSC開源社區(ID:oschina2013)今年年初,我們報道“因為被多人侮辱大吼,Swift 之父正式退出 Swift 核心團隊”。諸如此類的“語言暴力”、“網絡暴力”事件在開源社區乃至整個 IT 社區屢見不鮮。多個技術社區,都出…

PHP 分布式集群中session共享問題以及session有效期的設置

一、Session的原理 以下以默認情況舉例: session_start();之后,會生成一個唯一的session_id,每一個用戶對應唯一一個session_id,每一個session_id對應服務器端的一個session文件。這個session文件存儲著當前session_id的信息&am…

[SDOI2009]Bill的挑戰——全網唯一 一篇容斥題解

全網唯一一篇容斥題解 Description Solution 看到這個題,大部分人想的是狀壓dp 但是我是個蒟蒻沒想到,就用容斥切掉了。 并且復雜度比一般狀壓低, (其實這個容斥的算法,提出來源于ywy_c_asm) (然…

[NOIP2015提高組]運輸計劃

題目:BZOJ4326、洛谷P2680、Vijos P1983、UOJ#150、codevs4632、codevs5440。 題目大意:有一棵帶權樹,有一些運輸計劃,第i個運輸計劃從ai到bi,耗時為ai到bi的距離,所有運輸計劃一起開始。現在可以把一條邊權…

對象存儲OSS服務

一、oss是什么 阿里云對象存儲服務(Object Storage Service,簡稱OSS)為您提供基于網絡的數據存取服務。使用OSS,您可以通過網絡隨時存儲和調用包括文本、圖片、音頻和視頻等在內的各種非結構化數據文件。 阿里云OSS將數據文件以…

《Access 2007開發指南(修訂版)》一一1.5 什么是數據庫對象

本節書摘來自異步社區出版社《Access 2007開發指南(修訂版)》一書中的第1章,第1.5節,作者: 【美】Alison Balter,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.5 什么是數據庫對象 Access 2007開發指南(修訂版)正如前…

ETL工具kettle的組件--生成記錄

今天介紹下kettle的一個比較實用的組件——生成記錄;當我們想將一部分文本數據變成數據行,每個字段作為一個數據行的一個列,那么我們可以利用這個組件;它的位置在雙擊點開根據自己的實際需要進行設置當設置后,可以點擊…

Linux學習筆記一

linux  kernel lib module shell tools ls -la: 顯示所有文件包括隱藏文件  cat /proc/cpuinfo: 顯示cpu信息 man man  /string: 向上搜索string字符串 繼續按下小寫n向上搜索  ?string: 向下搜索string字符串 繼續按下大…

PHP中路由和rewrite的使用

一、場景介紹: 1、簡化url地址,方便大家記憶 2、有利于搜索引擎優化 3、安全(讓用戶看不出網站的目錄結構) 舉例:比如我這里將main控制器中的bb方法路由到kk,這樣,我們a標簽請求跳轉到cp.xi…

《NoSQL權威指南》導讀

引言 NoSQL權威指南“沒有什么會比引入新秩序更難,因為創新者必須要面對那些在舊環境中已經做得很好的對手,以及那些在新環境中做得很好的冷漠者。” ——Niccolo Machiavelli [1] 在過去的幾十年,我已經通過Elsevier/Morgan Kaufmann出版社出…

zookeeper的單實例和偽集群部署

原文鏈接: http://gudaoyufu.com/?p1395 zookeeper工作方式 ZooKeeper 是一個開源的分布式協調服務,由雅虎創建,是 Google Chubby 的開源實現。 分布式應用程序可以基于 ZooKeeper 實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協 調/通知、集群管…

PHP開發常見功能實現流程

一、pc端網站登錄 1、獲取并過濾用戶提交的用戶名和密碼以及驗證碼 2、驗證用戶提交驗證碼和session中的驗證碼是否一致 3、驗證用戶名是否存在 4、根據用戶名獲取密碼,并校驗密碼是否一致 5、密碼一致,則登錄成功,跳轉到對應的首頁 圖示…

七牛直播云服務技術揭秘

以下根據七牛云首席布道師何李石現場演講內容整理。 直播模型及其實現 一個通用的直播模型一般包括三個模塊:主播方、服務器端和播放端。 首先是主播方,它是產生視頻流的源頭,由一系列流程組成: 第一,通過一定的設備來…

golang 標準庫間依賴的可視化展示

簡介 國慶看完 << Go 語言圣經 >>,總想做點什么,來加深下印象.以可視化的方式展示 golang 標準庫之間的依賴,可能是一個比較好的切入點.做之前,簡單搜了下相關的內容,網上也要討論,但是沒有發現直接能拿過來用的.標準庫之間,是必然存在依賴關系的,不同庫被依賴的程…

Amazon Alexa 新里程碑: 50000 個功能、 20000 種設備、 3500 個品牌

幾個月過去&#xff0c;Alexa的設備連接量、活躍度等各項數據又攀升了。昨日&#xff0c;亞馬遜智慧家庭副總裁DanielRausch在IFA大會上公布了Alexa的各項數據&#xff1a;全球范圍內&#xff0c;Alexa已經擁有50000個功能&#xff0c;與20000種設備相容&#xff0c;并與超過35…

C# 計算耗時的三種方法

概述計算一段程序的耗時是我們在編程中很常見的用法&#xff0c;那這節內容就通過實例的方式來演示幾種常用的統計耗時的方法.方法一&#xff1a;stopwatchstatic void Main(string[] args){Stopwatch sw new Stopwatch();sw.Start();Thread.Sleep(999);sw.Stop();Console.Wri…

《HTML5 2D游戲編程核心技術》——第1章,第1.3節特別功能

本節書摘來自華章出版社《HTML5 2D游戲編程核心技術》一書中的第1章&#xff0c;第1.3節特別功能&#xff0c;作者&#xff3b;美&#xff3d; 戴維吉爾里&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 1.3 特別功能 Snail Bait游戲有3個特別的功能&a…

XunSearch的安裝和加入服務器開機腳本以及將目錄寫入系統變量

一、安裝xunserach 1、cd ~ 2、wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 #下載最新xunsearch包 3、tar -xjf xunsearch-full-latest.tar.bz2 #解壓xunsearch包 4、cd xunsearch-full-1.4.11/ #進入xunsearch包目錄 5、sh setup.sh #執…