更新時(shí)間:2022-08-25 10:45:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2576次
Java如何創(chuàng)建類(lèi)的對(duì)象?動(dòng)力節(jié)點(diǎn)小編來(lái)告訴大家。

使用 new 關(guān)鍵字調(diào)用對(duì)象的構(gòu)造器;
使用 Java 反射的 newInstance() 方法;
使用 Java Object 類(lèi)的 clone() 方法;
使用對(duì)象流 ObjectInputStream的readObject()方法讀取序列化對(duì)象;
最常見(jiàn)的Java對(duì)象的構(gòu)造方法,通過(guò)調(diào)用類(lèi)提供的構(gòu)造器創(chuàng)建對(duì)象。
Java 反射中有一個(gè) newInstance() 方法,可以創(chuàng)建對(duì)象,步驟如下:獲取要?jiǎng)?chuàng)建的類(lèi)的 Class 對(duì)象。如果只需要調(diào)用這個(gè)類(lèi)的訪(fǎng)問(wèn)權(quán)限為 public 無(wú)參構(gòu)造器,直接使用 Class 類(lèi)的實(shí)例方法 newInstance()。獲取 Class 對(duì)象的構(gòu)造器對(duì)象,通過(guò)調(diào)用 Class 類(lèi)的實(shí)例方法 getDeclaredConstractors() 來(lái)獲取構(gòu)造器對(duì)象的數(shù)組。(獲取所有構(gòu)造器,無(wú)視訪(fǎng)問(wèn)權(quán)限的限制,數(shù)組順序按照代碼中的順序決定)如果調(diào)用的構(gòu)造器是 private 的,需要調(diào)用 Constractor 類(lèi)的父類(lèi) AccessibleObject 類(lèi)的實(shí)例方法 setAccessible(true) 來(lái)打破訪(fǎng)問(wèn)限制。使用 Constractor 類(lèi)的實(shí)例方法 newInstance()。獲取 Class 對(duì)象的方法有3個(gè),此處不多贅述。獲取Constractor 對(duì)象的方法有4個(gè),此處不多贅述。
Object 類(lèi)是所有類(lèi)的直接或間接父類(lèi),Object 類(lèi)中提供了 實(shí)例方法 native(),在給定對(duì)象的基礎(chǔ)上,創(chuàng)建一個(gè)完全相同的對(duì)象。步驟如下:想要使用 clone() 方法創(chuàng)建對(duì)象的類(lèi),實(shí)現(xiàn) Cloneable 接口。在類(lèi)的內(nèi)部,重寫(xiě) Object 類(lèi)的 clone() 方法。
備注:
沒(méi)有實(shí)現(xiàn) Cloneable 接口,會(huì)拋出 CloneNotSupportedException 異常。Object 類(lèi)提供的 clone() 方法,訪(fǎng)問(wèn)權(quán)限是 protected,所以如果不重寫(xiě) clone() 方法,是沒(méi)有權(quán)限調(diào)用的。Object 類(lèi)的 clone() 方法,是 native 方法。
這個(gè)方法一共分兩步:將對(duì)象序列化,存儲(chǔ)到一個(gè)文件中。從文件中反序列化,得到類(lèi)對(duì)象。
序列化:想要序列化對(duì)象的類(lèi),實(shí)現(xiàn)Serializable接口。使用文件輸出流FileOutputStream創(chuàng)建存儲(chǔ)序列化之后對(duì)象的文件。使用對(duì)象輸出流ObjectOutputStream的實(shí)例方法writeObject(obj)。判斷類(lèi)中是否存在,名為writeReplace(),返回類(lèi)型為Object的方法,若有,寫(xiě)入這個(gè)方法的返回值;否則,寫(xiě)入obj對(duì)象。
反序列化:使用文件輸入流FileInputStream找到存儲(chǔ)序列化對(duì)象的文件。使用對(duì)象輸入流ObjectInputStream的實(shí)例方法readObject()。判斷類(lèi)中是否存在,名為readResolve(),返回類(lèi)型為Object的方法,若有讀取這個(gè)對(duì)象;否則,反序列化文件中的對(duì)象流。
備注:在類(lèi)中,writeReplace()和readResoleve()是兩個(gè)非常特殊的方法,其特征簽名需要嚴(yán)格限制:方法名限定,參數(shù)個(gè)數(shù)限定為0,返回類(lèi)型必須是Object,不能為Object的子類(lèi),但是可以?huà)伋霾煌漠惓?。訪(fǎng)問(wèn)修飾符沒(méi)有限制,但一般推薦為private,防止誤操作。其特殊的地方還在于將其設(shè)為private方法,沒(méi)有其他方法調(diào)用的情況下,編譯器不會(huì)發(fā)出警告。
以上就是關(guān)于“Java創(chuàng)建類(lèi)的對(duì)象”介紹,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)Java在線(xiàn)學(xué)習(xí),里面的課程內(nèi)容從入門(mén)到精通,細(xì)致全面,很適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)