国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java創(chuàng)建對(duì)象的4種方式

這篇具有很好參考價(jià)值的文章主要介紹了Java創(chuàng)建對(duì)象的4種方式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 四種方式

new
反射
Clone
反序列化

1.1 new

最常見(jiàn)的創(chuàng)建對(duì)象的方式,通過(guò)這種方式我們還可以調(diào)用任意的構(gòu)造器(無(wú)參的和有參的)

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person("fsx", 18);
    }
}

1.2 反射

Class.newInstance
這是我們運(yùn)用反射創(chuàng)建對(duì)象時(shí)最常用的方法。Class類的newInstance使用的是類的public的無(wú)參構(gòu)造器。因此也就是說(shuō)使用此方法創(chuàng)建對(duì)象的前提是必須有public的無(wú)參構(gòu)造器才行,否則報(bào)錯(cuò)。

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = Person.class.newInstance();
        System.out.println(person); // Person{name='null', age=null}
    }
}

Constructor.newInstance
本方法和Class類的newInstance方法很像,但是比它強(qiáng)大很多。 java.lang.relect.Constructor類里也有一個(gè)newInstance方法可以創(chuàng)建對(duì)象。我們可以通過(guò)這個(gè)newInstance方法調(diào)用有參數(shù)(不再必須是無(wú)參)的和私有的構(gòu)造函數(shù)(不再必須是public)。

public class Main {
    public static void main(String[] args) throws Exception {
        // 包括public的和非public的,當(dāng)然也包括private的
        Constructor<?>[] declaredConstructors = Person.class.getDeclaredConstructors();
        // 只返回public的~~~~~~(返回結(jié)果是上面的子集)
        Constructor<?>[] constructors = Person.class.getConstructors();

        Constructor<?> noArgsConstructor = declaredConstructors[0];
        Constructor<?> haveArgsConstructor = declaredConstructors[1];

        noArgsConstructor.setAccessible(true); // 非public的構(gòu)造必須設(shè)置true才能用于創(chuàng)建實(shí)例
        Object person1 = noArgsConstructor.newInstance();
        Object person2 = declaredConstructors[1].newInstance("fsx", 18);
        System.out.println(person1);
        System.out.println(person2);
    }
}

1.3 clone

調(diào)用一個(gè)對(duì)象的clone方法,JVM就會(huì)創(chuàng)建一個(gè)新的對(duì)象,將前面的對(duì)象的內(nèi)容全部拷貝進(jìn)去,用clone方法創(chuàng)建對(duì)象并不會(huì)調(diào)用任何構(gòu)造函數(shù)。 要使用clone方法,我們必須先實(shí)現(xiàn)Cloneable接口并復(fù)寫(xiě)Object的clone方法。

public class Person implements Cloneable {
	...
	// 訪問(wèn)權(quán)限寫(xiě)為public,并且返回值寫(xiě)為person
    @Override
    public Person clone() throws CloneNotSupportedException {
        return (Person) super.clone();
    }
    ...
}

public class Main {

    public static void main(String[] args) throws Exception {
        Person person = new Person("fsx", 18);
        Object clone = person.clone();

        System.out.println(person);
        System.out.println(clone);
        System.out.println(person == clone); //false
    }
}

這種復(fù)制稱為淺復(fù)制,如果需要clone完成深復(fù)制則需要在Son也實(shí)現(xiàn)Cloneable接口和重寫(xiě)clone方法。

1.4 反序列化

列化和反序列化一個(gè)對(duì)象,JVM會(huì)給我們創(chuàng)建一個(gè)單獨(dú)的對(duì)象,在反序列化時(shí),JVM創(chuàng)建對(duì)象并不會(huì)調(diào)用任何構(gòu)造函數(shù)。為了反序列化一個(gè)對(duì)象,我們需要讓我們的類實(shí)現(xiàn)Serializable接口。

public class Main {

    public static void main(String[] args) throws Exception {
        Person person = new Person("fsx", 18);
        byte[] bytes = SerializationUtils.serialize(person);

        // 字節(jié)數(shù)組:可以來(lái)自網(wǎng)絡(luò)、可以來(lái)自文件(本處直接本地模擬)
        Object deserPerson = SerializationUtils.deserialize(bytes);
        System.out.println(person);
        System.out.println(deserPerson);
        System.out.println(person == deserPerson);
    }
}

2 對(duì)比

Java創(chuàng)建實(shí)例對(duì)象,并不一定必須要調(diào)用構(gòu)造器的。
創(chuàng)建對(duì)象方式 是否調(diào)用了構(gòu)造器
new關(guān)鍵字 是
Class.newInstance 是
Constructor.newInstance 是
Clone 否
反序列化 否文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-493129.html

到了這里,關(guān)于Java創(chuàng)建對(duì)象的4種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【優(yōu)化技術(shù)專題】「性能優(yōu)化系列」針對(duì)Java對(duì)象壓縮及序列化技術(shù)的探索之路

    【優(yōu)化技術(shù)專題】「性能優(yōu)化系列」針對(duì)Java對(duì)象壓縮及序列化技術(shù)的探索之路

    序列化和反序列化 序列化就是指把對(duì)象轉(zhuǎn)換為字節(jié)碼; 對(duì)象傳遞和保存時(shí),保證對(duì)象的完整性和可傳遞性。把對(duì)象轉(zhuǎn)換為有字節(jié)碼,以便在網(wǎng)絡(luò)上傳輸或保存在本地文件中; 反序列化就是指把字節(jié)碼恢復(fù)為對(duì)象; 根據(jù)字節(jié)流中保存的對(duì)象狀態(tài)及描述信息,通過(guò)反序列化重建

    2024年01月22日
    瀏覽(25)
  • java通過(guò)反射創(chuàng)建反射對(duì)象三種的方法

    目錄 前言: 代碼部分: computer類: 1.類名.class創(chuàng)建反射對(duì)象: 2.對(duì)象.getclass創(chuàng)建反射對(duì)象: 3.Class.forName(\\\"\\\")創(chuàng)建反射對(duì)象: JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;這種動(dòng)態(tài)

    2024年02月14日
    瀏覽(30)
  • 后端項(xiàng)目開(kāi)發(fā):工具類封裝(序列化、反射)

    根據(jù)《阿里巴巴開(kāi)發(fā)規(guī)范》,包名使用單數(shù),類名可以使用復(fù)數(shù)。 所以generic-common創(chuàng)建util包和utils工具類 很多時(shí)候我們需要將接收到的json數(shù)據(jù)轉(zhuǎn)換為對(duì)象,或者將對(duì)象轉(zhuǎn)為json存儲(chǔ)。這時(shí)候我們需要編寫(xiě)用于json轉(zhuǎn)換的工具類。 新建util目錄,再創(chuàng)建JacksonUtils類

    2024年02月11日
    瀏覽(21)
  • 【Redis,Java】Redis的兩種序列化方式—nosql數(shù)據(jù)庫(kù)

    【Redis,Java】Redis的兩種序列化方式—nosql數(shù)據(jù)庫(kù)

    redis和mysql的區(qū)別: redis是屬于nosql的數(shù)據(jù)庫(kù),而mysql是屬于sql數(shù)據(jù)庫(kù),redis是屬于nosql數(shù)據(jù)庫(kù)。mysql是存儲(chǔ)在磁盤中的,redis是存儲(chǔ)在內(nèi)存中的,所以redis的讀取書(shū)讀快。這里所說(shuō)的redis代表nosql,而mysql代表sql。 redis的數(shù)據(jù)庫(kù)是以鍵值對(duì)為基礎(chǔ)存儲(chǔ)在內(nèi)存中的,而mysql為代表的關(guān)

    2024年02月21日
    瀏覽(25)
  • Java反射:探索對(duì)象創(chuàng)建與類信息獲取

    Java反射:探索對(duì)象創(chuàng)建與類信息獲取

    ??歡迎來(lái)到Java學(xué)習(xí)路線專欄~Java反射:探索對(duì)象創(chuàng)建與類信息獲取 ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁(yè):IT·陳寒的博客 ??該系列文章專欄:Java學(xué)習(xí)路線 ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限

    2024年02月09日
    瀏覽(24)
  • Java 基礎(chǔ)進(jìn)階篇(十七):反射概述及獲取對(duì)象的方式

    Java 基礎(chǔ)進(jìn)階篇(十七):反射概述及獲取對(duì)象的方式

    反射是指對(duì)于任何一個(gè)Class類,在 “運(yùn)行的時(shí)候”,不用創(chuàng)建對(duì)象,就可以直接得到這個(gè)類全部成分。 在運(yùn)行時(shí),可以直接得到這個(gè)類的構(gòu)造器對(duì)象:Constructor 在運(yùn)行時(shí),可以直接得到這個(gè)類的成員變量對(duì)象:Field 在運(yùn)行時(shí),可以直接得到這個(gè)類的成員方法對(duì)象:Method 這種

    2024年02月07日
    瀏覽(24)
  • Java創(chuàng)建數(shù)組的四種方式

    1.使用默認(rèn)值來(lái)初始化 語(yǔ)法: 數(shù)組元素類型 [] 數(shù)組名稱 = new 數(shù)組元素類型 [數(shù)組長(zhǎng)度] EG: int [] nums = new int [5]; //創(chuàng)建了一個(gè)類型為int,名字為nums ,長(zhǎng)度為5的數(shù)組 2.先聲明一個(gè)數(shù)組,再給值 語(yǔ)法: 數(shù)據(jù)元素類型 [] 數(shù)組名稱; 數(shù)組名稱 = new 數(shù)組元素類型[數(shù)組長(zhǎng)度]; EG: int [] nums; num

    2024年02月09日
    瀏覽(36)
  • Java創(chuàng)建數(shù)組、賦值的四種方式,聲明+創(chuàng)建+初始化 詳解

    以int數(shù)據(jù)類型為例 注意: new 數(shù)據(jù)類型[]{},其中花括號(hào)可以省去,但要在[ ]中填寫(xiě)數(shù)組的個(gè)數(shù); 創(chuàng)建多維數(shù)組時(shí) new后面第一個(gè)方括號(hào)中的元素?cái)?shù)量不能省略 1、一維數(shù)組的聲明方式: type[] arrayName; 或 type arrayName[]; 推薦使用第一種格式,因?yàn)榈谝环N格式具有更好的可讀性,表

    2024年04月11日
    瀏覽(24)
  • Qt 對(duì)象序列化/反序列化

    閱讀本文大概需要 3 分鐘 日常開(kāi)發(fā)過(guò)程中,避免不了對(duì)象序列化和反序列化,如果你使用 Qt 進(jìn)行開(kāi)發(fā),那么有一種方法實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單和容易。 我們知道 Qt 的元對(duì)象系統(tǒng)非常強(qiáng)大,基于此屬性我們可以實(shí)現(xiàn)對(duì)象的序列化和反序列化操作。 比如有一個(gè)學(xué)生類,包含以下幾

    2024年02月13日
    瀏覽(27)
  • springboot對(duì)象序列化自定義序列化注解

    在開(kāi)發(fā)中有時(shí)候會(huì)遇到一些內(nèi)容返回時(shí)需要翻譯,或者一些內(nèi)容在序列化之前需要特殊處理(脫敏啥的)。 一般對(duì)單個(gè)屬性可以直接用 jackson 的序列化注解對(duì)某個(gè)屬性單獨(dú)處理 com.fasterxml.jackson.databind.annotation.JsonSerialize(using= xxx.class) 但是直接使用不太靈活,可以進(jìn)一步引入注

    2024年02月07日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包