成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

再見,單身狗!Java 創建對象的六種方式,總有一種適合你......

開發 前端
棧長本文教你創建對象的 6 種方式,從低端到高端,各種創建方式,總有一個適合你,沒有對象的自己生成一個吧!

背景

又到一年一度的情人節了,祝各位程序員有情人終成眷屬!

今天公眾號本來有個廣告推廣的,被臨時鴿了,唉。。這個情人節有點傷,還好對象沒鴿。。

情人節寫點什么好呢?!

有座的各位肯定還有不少單身 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??

責任編輯:武曉燕 來源: Java技術棧
相關推薦

2022-08-18 09:38:02

Spring跨域

2009-02-26 10:29:00

2020-07-10 10:48:51

編程語言JavaPython

2010-02-01 08:33:46

2015-01-26 15:58:02

MDM應用指南

2021-12-31 16:16:04

JavaScript數組代碼

2019-11-13 08:52:19

Linux監控日志

2020-12-10 09:48:15

鴻蒙Linux開發

2017-06-26 10:35:58

前端JavaScript繼承方式

2022-03-28 20:57:31

私有屬性class屬性和方法

2023-10-30 11:53:37

繼承JS父類

2018-08-03 16:40:06

前端前端框架微服務

2025-01-21 10:04:40

Java并發阻塞隊列

2019-05-16 13:00:18

異步編程JavaScript回調函數

2025-02-27 00:00:30

SpringJava方式

2009-02-11 09:46:00

ASON網絡演進

2021-12-15 23:10:34

JS Debugger 前端開發

2020-07-31 11:12:39

安全威脅網絡攻擊網絡安全

2022-01-14 10:34:50

黑客隱藏蹤跡網絡安全

2020-04-27 09:00:00

雙因素認證身份認證生物識別
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一级免费看 | 欧美猛交| www.日日操| 国产一级视频在线播放 | 午夜国产精品视频 | 国产乱码精品一区二区三区中文 | 欧美色a v | 在线播放一区 | www日本高清视频 | 久久精品视频在线观看 | 我要看黄色录像一级片 | 成人亚洲精品 | 久久99这里只有精品 | 久草在线在线精品观看 | 四虎永久免费在线 | 免费视频二区 | 日本不卡一区 | 在线免费观看日本 | 国产ts人妖一区二区三区 | 成人在线视频免费观看 | 国产伦精品一区二区 | 欧美黑人体内she精在线观看 | 亚洲黄色成人网 | www.天天干.com | 国产精品爱久久久久久久 | 久久高清 | 97中文视频 | 色综合久久天天综合网 | 日韩免费福利视频 | 一区免费| 国产免费看 | 亚洲精品电影在线观看 | a视频在线观看 | 九九一级片 | 一区二区三区中文字幕 | 久久久久久av | 国产精品亚洲综合 | 四虎永久影院 | 亚洲精品久久久一区二区三区 | 夜夜夜夜草 | 亚洲欧美精品国产一级在线 |