日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
再見,單身狗!Java創(chuàng)建對象的六種方式,總有一種適合你......

背景

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

創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計,灣里網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:灣里等地區(qū)。灣里做網(wǎng)站價格咨詢:028-86922220

情人節(jié)寫點什么好呢?!

有座的各位肯定還有不少單身 dog 吧?

沒關(guān)系,棧長本文教你創(chuàng)建對象的 6 種方式,從低端到高端,各種創(chuàng)建方式,總有一個適合你,沒有對象的自己生成一個吧!

2022,一定脫單,再見單身狗!

創(chuàng)建對象的 6 種方式

假設(shè)有個女朋友類:

@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend {

private String name;

}

注解使用的是 Lombok 框架注解,方便快速開發(fā),不熟悉的閱讀這篇文章:

推薦一款代碼神器,代碼量至少省一半!

方法1:new 一個對象

沒對象就 new 一個吧,沒錯,使用 new 關(guān)鍵字,這也是 Java 創(chuàng)建對象最簡單直接的方式了。

示例代碼:

/**
* new一個對象
* @author: 棧長
* @from: 公眾號Java技術(shù)棧
*/
@Test
public void girlFriend1() {
GirlFriend girlFriend = new GirlFriend("new一個對象");
System.out.println(girlFriend);
}

輸出結(jié)果:

GirlFriend(name=new一個對象)

方法2:克隆一個對象

朋友有女朋友,你沒有,如果可以,把別人的女朋友克隆一個吧?

讓女朋友類先實現(xiàn) Cloneable 接口,并且實現(xiàn)其 clone() 方法:

/**
* 女朋友類
* @author: 棧長
* @from: 公眾號Java技術(shù)棧
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable {

private String name;

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

}

注意:這里演示默認(rèn)使用的是淺拷貝,即只克隆基本類型的字段,引用類型的需要再重寫 clone() 方法手動賦下引用字段的值。

現(xiàn)在克隆一個對象,示例代碼:

@Test
public void girlFriend2() throws CloneNotSupportedException {
GirlFriend girlFriend1 = new GirlFriend("克隆一個對象");
GirlFriend girlFriend2 = (GirlFriend) girlFriend1.clone();
System.out.println(girlFriend2);
}

輸出結(jié)果:

GirlFriend(name=克隆一個對象)

使用克隆的好處就是可以快速創(chuàng)建一個和原對象值一樣的對象,對象的字段值一樣,但是兩個不同的引用。

方法3:類派發(fā)一個對象

直接使用女朋友類派發(fā)一個吧:

/**
* 類派發(fā)一個對象
* @author: 棧長
* @from: 公眾號Java技術(shù)棧
*/
@Test
public void girlFriend3() throws InstantiationException, IllegalAccessException {
GirlFriend girlFriend = GirlFriend.class.newInstance();
girlFriend.setName("類派發(fā)一個對象");
System.out.println(girlFriend);
}

輸出結(jié)果:

GirlFriend(name=類派發(fā)一個對象)

另外,最新最全的 Java 面試題整理好了,微信搜索Java面試庫小程序在線刷題。

方法4:反射一個對象

知道女朋友類在哪里(類全路徑),但卻沒有被加載,那就反射一個對象吧:

/**
* 反射一個對象
* @author: 棧長
* @from: 公眾號Java技術(shù)棧
*/
@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);
}

輸出結(jié)果:

GirlFriend(name=反射一個對象)

方法5:構(gòu)造一個對象

知道女朋友類的構(gòu)造,就可以調(diào)用構(gòu)造器構(gòu)造一個對象:

/**
* 構(gòu)造一個對象
* @author: 棧長
* @from: 公眾號Java技術(shù)棧
*/
@Test
public void girlFriend5() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
GirlFriend girlFriend = GirlFriend.class.getConstructor().newInstance();
girlFriend.setName("構(gòu)造一個對象");
System.out.println(girlFriend);
}

輸出結(jié)果:

GirlFriend(name=構(gòu)造一個對象)

這里也可以同時結(jié)合反射構(gòu)造一個對象。

方法6:反序列化一個對象

這個和克隆的作用類似,假如以前序列化(保存)了一個女朋友在磁盤上,現(xiàn)在就可以反序列化出來。

Java 序列化基礎(chǔ)就不介紹了,棧長之前分享不少,我也都整理好了,可以在公眾號Java技術(shù)棧菜單中閱讀。

首先讓女朋友可序列化,實現(xiàn) Serializable 接口:

/**
* 女朋友類
* @author: 棧長
* @from: 公眾號Java技術(shù)棧
*/
@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技術(shù)棧
*/
@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);
}

輸出結(jié)果:

GirlFriend(name=反序列化一個對象)

總結(jié)

本文完整示例代碼已上傳 Github:

??https://github.com/javastacks/javastack??


文章名稱:再見,單身狗!Java創(chuàng)建對象的六種方式,總有一種適合你......
當(dāng)前鏈接:http://www.dlmjj.cn/article/dpgpjhd.html