6種Java創(chuàng)建對(duì)象的方式總結(jié)
1. 使用new關(guān)鍵字
new關(guān)鍵字是Java中最常用的創(chuàng)建對(duì)象的方式。通過(guò)調(diào)用類的構(gòu)造函數(shù),new關(guān)鍵字實(shí)例化一個(gè)對(duì)象。
示例如下:
public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } Person person = new Person("小明", 18);
2. 使用Class的newInstance()方法
Class的newInstance()方法可以在運(yùn)行時(shí)創(chuàng)建一個(gè)類的新實(shí)例。它等效于使用new操作符,但是語(yǔ)法更加動(dòng)態(tài)。
示例如下:
public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } try { Person person = Person.class.newInstance(); person.name = "小明"; person.age = 18; } catch (Exception e) { e.printStackTrace(); }
3. 使用Constructor的newInstance()方法
Constructor的newInstance()方法可以在運(yùn)行時(shí)創(chuàng)建一個(gè)類的新實(shí)例,并且可以傳入構(gòu)造函數(shù)的參數(shù)。這種方式比Class的newInstance()方法更加靈活,因?yàn)榭梢赃x擇不同的構(gòu)造函數(shù)。
示例如下:
public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } try { Constructor<Person> constructor = Person.class.getConstructor(String.class, int.class); Person person = constructor.newInstance("小明", 18); } catch (Exception e) { e.printStackTrace(); }
4. 使用clone()方法
clone()方法可以創(chuàng)建對(duì)象的一個(gè)副本,并且可以重寫(xiě)clone()方法來(lái)實(shí)現(xiàn)深克隆。
示例如下:
public class Person implements Cloneable { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } Person person = new Person("小明", 18); Person clone = null; try { clone = (Person) person.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); }
5. 使用反序列化
反序列化是將對(duì)象從字節(jié)流中恢復(fù)的過(guò)程。通過(guò)序列化后,可以把對(duì)象存儲(chǔ)到文件或網(wǎng)絡(luò)中,然后再通過(guò)反序列化的方式恢復(fù)成對(duì)象。
示例如下:
public class Person implements Serializable { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } Person person = new Person("小明", 18); try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat")); oos.writeObject(person); oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat")); Person clone = (Person) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); }
6. 使用工廠模式
工廠模式可以將對(duì)象的創(chuàng)建和使用解耦。通過(guò)定義一個(gè)對(duì)象工廠,可以更加靈活地產(chǎn)生對(duì)象。
示例如下:
public interface Animal { String getName(); } public class Cat implements Animal { @Override public String getName() { return "Cat"; } } public class Dog implements Animal { @Override public String getName() { return "Dog"; } } public class AnimalFactory { public Animal createAnimal(String type) { switch (type) { case "Cat": return new Cat(); case "Dog": return new Dog(); default: throw new IllegalArgumentException("Unsupported animal type: " + type); } } } AnimalFactory factory = new AnimalFactory(); Animal cat = factory.createAnimal("Cat"); Animal dog = factory.createAnimal("Dog");
總結(jié)
本文介紹了Java中六種常見(jiàn)的創(chuàng)建對(duì)象的方式,分別是使用new關(guān)鍵字、Class的newInstance()方法、Constructor的newInstance()方法、clone()方法、反序列化、工廠模式等。在實(shí)際開(kāi)發(fā)中,可以根據(jù)具體的業(yè)務(wù)場(chǎng)景選擇不同的創(chuàng)建方式。
到此這篇關(guān)于6種Java創(chuàng)建對(duì)象的方式總結(jié)的文章就介紹到這了,更多相關(guān)Java創(chuàng)建對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java創(chuàng)建對(duì)象的幾種方法
- Java中創(chuàng)建對(duì)象的6種方式
- Java中五種不同方法的創(chuàng)建對(duì)象
- Java使用反射創(chuàng)建對(duì)象示例
- Java中創(chuàng)建對(duì)象的5種方式總結(jié)
- Java String創(chuàng)建對(duì)象實(shí)例解析
- java通過(guò)反射創(chuàng)建對(duì)象并調(diào)用方法
- Java創(chuàng)建對(duì)象(顯式創(chuàng)建和隱含創(chuàng)建)
- Java創(chuàng)建對(duì)象之顯示創(chuàng)建與隱式創(chuàng)建
- Java?Unsafe創(chuàng)建對(duì)象的方法實(shí)現(xiàn)
相關(guān)文章
Java在長(zhǎng)字符串中查找短字符串的實(shí)現(xiàn)多種方法
這篇文章主要介紹了Java在長(zhǎng)字符串中查找短字符串的實(shí)現(xiàn)多種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12SpringBoot整合JavaMail通過(guò)阿里云企業(yè)郵箱發(fā)送郵件的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot整合JavaMail通過(guò)阿里云企業(yè)郵箱發(fā)送郵件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11java中實(shí)現(xiàn)token過(guò)期失效超時(shí)
在Java應(yīng)用程序中,為了確保安全性和保護(hù)用戶數(shù)據(jù),一種常見(jiàn)的做法是使用Token進(jìn)行身份驗(yàn)證和授權(quán),Token是由服務(wù)器生成的具有一定時(shí)效的令牌,用于識(shí)別和驗(yàn)證用戶身份,當(dāng)Token失效后,用戶將無(wú)法再進(jìn)行相關(guān)操作,從而提高系統(tǒng)的安全性2023-10-10Java基于Socket實(shí)現(xiàn)簡(jiǎn)單的多線程回顯服務(wù)器功能示例
這篇文章主要介紹了Java基于Socket實(shí)現(xiàn)簡(jiǎn)單的多線程回顯服務(wù)器功能,結(jié)合實(shí)例形式分析了java使用socket進(jìn)行多線程數(shù)據(jù)傳輸?shù)南嚓P(guān)操作技巧,需要的朋友可以參考下2017-08-08SpringBoot 如何實(shí)現(xiàn)異步編程
在SpringBoot的日常開(kāi)發(fā)中,一般都是同步調(diào)用的,但實(shí)際中有很多場(chǎng)景非常適合使用異步來(lái)處理,本文就詳細(xì)的介紹一下SpringBoot 如何實(shí)現(xiàn)異步編程 ,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12關(guān)于@ResponseBody 默認(rèn)輸出的誤區(qū)的解答
這篇文章主要介紹了關(guān)于@ResponseBody 默認(rèn)輸出的誤區(qū)的解答,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04SpringBoot 2 快速整合 Filter過(guò)程解析
這篇文章主要介紹了SpringBoot 2 快速整合 Filter過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Java異常繼承結(jié)構(gòu)解析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java異常繼承結(jié)構(gòu)解析的相關(guān)知識(shí),需要的朋友可以參考下2017-04-04SpringBoot整合Elasticsearch實(shí)現(xiàn)索引和文檔的操作方法
Elasticsearch 基于 Apache Lucene 構(gòu)建,采用 Java 編寫(xiě),并使用 Lucene 構(gòu)建索引、提供搜索功能,本文分步驟通過(guò)綜合案例給大家分享SpringBoot整合Elasticsearch的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2021-05-05SpringBoot2.x 集成騰訊云短信的詳細(xì)流程
本文主要對(duì)SpringBoot2.x集成騰訊云短信進(jìn)行簡(jiǎn)單總結(jié),其中SpringBoot使用的2.4.5版本,本文通過(guò)業(yè)務(wù)流程圖實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06