背景
又到一年一度的情人節了,祝各位程式員有情人終成眷屬!
今天公眾號本來有個廣告推廣的,被臨時鴿了,唉,,這個情人節有點傷,還好物件沒鴿,,
情人節寫點什么好呢?!
有座的各位肯定還有不少單身 dog 吧?

沒關系,堆疊長本文教你創建物件的 6 種方式,從低端到高端,各種創建方式,總有一個適合你,沒有物件的自己生成一個吧!
2022,一定脫單,再見單身狗!
創建物件的 6 種方式
假設有個女朋友類:
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend {
private String name;
}
注解使用的是 Lombok 框架注解,方便快速開發,不熟悉的閱讀這篇文章:
推薦一款代碼神器,代碼量至少省一半!
方法1:new 一個物件
沒物件就 new 一個吧,沒錯,使用 new 關鍵字,這也是 Java 創建物件最簡單直接的方式了,
示例代碼:
/**
* new一個物件
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Test
public void girlFriend1() {
GirlFriend girlFriend = new GirlFriend("new一個物件");
System.out.println(girlFriend);
}
輸出結果:
GirlFriend(name=new一個物件)
方法2:克隆一個物件
朋友有女朋友,你沒有,如果可以,把別人的女朋友克隆一個吧?
讓女朋友類先實作 Cloneable 介面,并且實作其 clone() 方法:
/**
* 女朋友類
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable {
private String name;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
注意:這里演示默認使用的是淺拷貝,即只克隆基本型別的欄位,參考型別的需要再重寫 clone() 方法手動賦下參考欄位的值,
現在克隆一個物件,示例代碼:
@Test
public void girlFriend2() throws CloneNotSupportedException {
GirlFriend girlFriend1 = new GirlFriend("克隆一個物件");
GirlFriend girlFriend2 = (GirlFriend) girlFriend1.clone();
System.out.println(girlFriend2);
}
輸出結果:
GirlFriend(name=克隆一個物件)
使用克隆的好處就是可以快速創建一個和原物件值一樣的物件,物件的欄位值一樣,但是兩個不同的參考,
方法3:類派發一個物件
直接使用女朋友類派發一個吧:
/**
* 類派發一個物件
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Test
public void girlFriend3() throws InstantiationException, IllegalAccessException {
GirlFriend girlFriend = GirlFriend.class.newInstance();
girlFriend.setName("類派發一個物件");
System.out.println(girlFriend);
}
輸出結果:
GirlFriend(name=類派發一個物件)
另外,最新最全的 Java 面試題整理好了,微信搜索Java面試庫小程式在線刷題,
方法4:反射一個物件
知道女朋友類在哪里(類全路徑),但卻沒有被加載,那就反射一個物件吧:
/**
* 反射一個物件
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Test
public void girlFriend4() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
GirlFriend girlFriend = (GirlFriend) Class.forName("cn.javastack.test.jdk.core.GirlFriend").newInstance();
girlFriend.setName("反射一個物件");
System.out.println(girlFriend);
}
輸出結果:
GirlFriend(name=反射一個物件)
方法5:構造一個物件
知道女朋友類的構造,就可以呼叫構造器構造一個物件:
/**
* 構造一個物件
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Test
public void girlFriend5() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
GirlFriend girlFriend = GirlFriend.class.getConstructor().newInstance();
girlFriend.setName("構造一個物件");
System.out.println(girlFriend);
}
輸出結果:
GirlFriend(name=構造一個物件)
這里也可以同時結合反射構造一個物件,
方法6:反序列化一個物件
這個和克隆的作用類似,假如以前序列化(保存)了一個女朋友在磁盤上,現在就可以反序列化出來,
Java 序列化基礎就不介紹了,堆疊長之前分享不少,我也都整理好了,可以在公眾號Java技術堆疊選單中閱讀,
首先讓女朋友可序列化,實作 Serializable 介面:
/**
* 女朋友類
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;
private String name;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
序列化/反序列化物件示例代碼:
/**
* 反序列化一個物件
* @author: 堆疊長
* @from: 公眾號Java技術堆疊
*/
@Test
public void girlFriend6() throws IOException, ClassNotFoundException {
GirlFriend girlFriend1 = new GirlFriend("反序列化一個物件");
// 序列化一個女朋友
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("gf.obj"));
objectOutputStream.writeObject(girlFriend1);
objectOutputStream.close();
// 反序列化出來
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("gf.obj"));
GirlFriend girlFriend2 = (GirlFriend) objectInputStream.readObject();
objectInputStream.close();
System.out.println(girlFriend2);
}
輸出結果:
GirlFriend(name=反序列化一個物件)
總結
本文完整示例代碼已上傳 Github:
https://github.com/javastacks/javastack
歡迎 Star 學習,后續會持續更新~
如果你不喜歡用代碼為自己生成物件,你也可以試試這首 Java 表白詩:
寫了一首 Java 表白詩,女朋友不愁了!
祝大家成功,不過對方僅限程式員,不然會看不懂的,
你還知道哪些創建物件的方式呢?歡迎留言討論~!
好了,今天的分享就到這里了,后面堆疊長會分享更多好玩的 Java 技術和最新的技術資訊,關注公眾號Java技術堆疊第一時間推送,我也將主流 Java 面試題和參考答案都整理好了,在公眾號后臺回復關鍵字 "面試" 進行刷題,
最后,覺得我的文章對你用識訓的話,動動小手,給個在看、轉發,原創不易,堆疊長需要你的鼓勵,
著作權宣告: 本文系公眾號 "Java技術堆疊" 原創,轉載、參考本文內容請注明出處,抄襲、洗稿一律投訴侵權,后果自負,并保留追究其法律責任的權利,
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
2.勁爆!Java 協程要來了,,,
3.Spring Boot 2.x 教程,太全了!
4.20w 程式員紅包封面,快快領取,,,
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/423803.html
標籤:其他
上一篇:IC后端物理實作自動化工具 OpenROAD系列(一)OpenROAD開發環境搭建
下一篇:Spring學習
