Java編程學(xué)習(xí)中創(chuàng)建對象的5種方式

Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言收厨。Java 技術(shù)具有卓越的通用性晋柱、高效性、平臺移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心蜗细、游戲控制臺注竿、科學(xué)超級計(jì)算機(jī)兼吓、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。

給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

作為Java開發(fā)者,我們每天創(chuàng)建很多對象进栽,但我們通常使用依賴管理系統(tǒng),比如Spring去創(chuàng)建對象恭垦。然而這里有很多創(chuàng)建對象的方法快毛,我們會在這篇文章中學(xué)到。

Java中有5種創(chuàng)建對象的方式署照,下面給出它們的例子還有它們的字節(jié)碼

小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零祸泪,五五四,六零七 】建芙,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)懂扼!裙內(nèi)有開發(fā)工具禁荸,很多干貨和技術(shù)資料分享!

如果你運(yùn)行了末尾的的程序阀湿,你會發(fā)現(xiàn)方法1,2,3用構(gòu)造函數(shù)創(chuàng)建對象赶熟,方法4,5沒有調(diào)用構(gòu)造函數(shù)。

1.使用new關(guān)鍵字

這是最常見也是最簡單的創(chuàng)建對象的方式了陷嘴。通過這種方式映砖,我們可以調(diào)用任意的構(gòu)造函數(shù)(無參的和帶參數(shù)的)。

Employee emp1 = new Employee();

0: new #19 // class org/programming/mitra/exercises/Employee3: dup4: invokespecial #21 // Method org/programming/mitra/exercises/Employee."":()V

2.使用Class類的newInstance方法

我們也可以使用Class類的newInstance方法創(chuàng)建對象灾挨。這個newInstance方法調(diào)用無參的構(gòu)造函數(shù)創(chuàng)建對象邑退。

我們可以通過下面方式調(diào)用newInstance方法創(chuàng)建對象:

Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();

或者

Employee emp2 = Employee.class.newInstance();

51: invokevirtual #70 // Method java/lang/Class.newInstance:()Ljava/lang/Object;

3.使用Constructor類的newInstance方法

和Class類的newInstance方法很像, java.lang.reflect.Constructor類里也有一個newInstance方法可以創(chuàng)建對象劳澄。我們可以通過這個newInstance方法調(diào)用有參數(shù)的和私有的構(gòu)造函數(shù)地技。

Constructor constructor = Employee.class.getConstructor();Employee emp3 = constructor.newInstance();

111: invokevirtual #80 // Method java/lang/reflect/Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;

這兩種newInstance方法就是大家所說的反射。事實(shí)上Class的newInstance方法內(nèi)部調(diào)用Constructor的newInstance方法秒拔。這也是眾多框架莫矗,如Spring、Hibernate、Struts等使用后者的原因作谚。想了解這兩個newInstance方法的區(qū)別三娩,請看這篇Creating objects through Reflection in Java with Example.

4.使用clone方法

無論何時我們調(diào)用一個對象的clone方法,jvm就會創(chuàng)建一個新的對象妹懒,將前面對象的內(nèi)容全部拷貝進(jìn)去尽棕。用clone方法創(chuàng)建對象并不會調(diào)用任何構(gòu)造函數(shù)。

要使用clone方法彬伦,我們需要先實(shí)現(xiàn)Cloneable接口并實(shí)現(xiàn)其定義的clone方法滔悉。

Employee emp4 = (Employee) emp3.clone();

162: invokevirtual #87 // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/Object;

小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零,五五四单绑,六零七 】回官,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)搂橙!裙內(nèi)有開發(fā)工具歉提,很多干貨和技術(shù)資料分享!

5.使用反序列化

當(dāng)我們序列化和反序列化一個對象区转,jvm會給我們創(chuàng)建一個單獨(dú)的對象苔巨。在反序列化時,jvm創(chuàng)建對象并不會調(diào)用任何構(gòu)造函數(shù)废离。

為了反序列化一個對象侄泽,我們需要讓我們的類實(shí)現(xiàn)Serializable接口

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));

261: invokevirtual #118 // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object;

我們從上面的字節(jié)碼片段可以看到,除了第1個方法蜻韭,其他4個方法全都轉(zhuǎn)變?yōu)閕nvokevirtual(創(chuàng)建對象的直接方法)悼尾,第一個方法轉(zhuǎn)變?yōu)閮蓚€調(diào)用,new和invokespecial(構(gòu)造函數(shù)調(diào)用)肖方。

例子

讓我們看一看為下面這個Employee類創(chuàng)建對象:

class Employee implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private String name; public Employee() {

下面的Java程序中闺魏,我們將用5種方式創(chuàng)建Employee對象。你可以從GitHub找到這些代碼俯画。

public class ObjectCreation { public static void main(String... args) throws Exception { // By using new keyword

小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零析桥,五五四,六零七 】艰垂,無論你是大牛還是小白泡仗,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具材泄,很多干貨和技術(shù)資料分享沮焕!

程序會輸出:

Employee Constructor Called...Employee [name=Naresh], hashcode : -1968815046Employee Constructor Called...Employee [name=Rishi], hashcode : 78970652Employee Constructor Called...Employee [name=Yogesh], hashcode : -1641292792Employee [name=Atul], hashcode : 2051657Employee [name=Akash], hashcode?: 63313419

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拉宗,隨后出現(xiàn)的幾起案子峦树,更是在濱河造成了極大的恐慌辣辫,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魁巩,死亡現(xiàn)場離奇詭異急灭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谷遂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門葬馋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肾扰,你說我怎么就攤上這事畴嘶。” “怎么了集晚?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵窗悯,是天一觀的道長。 經(jīng)常有香客問我偷拔,道長蒋院,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任莲绰,我火速辦了婚禮欺旧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛤签。我一直安慰自己辞友,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布顷啼。 她就那樣靜靜地躺著踏枣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钙蒙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天间驮,我揣著相機(jī)與錄音躬厌,去河邊找鬼。 笑死竞帽,一個胖子當(dāng)著我的面吹牛扛施,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屹篓,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼疙渣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了堆巧?” 一聲冷哼從身側(cè)響起妄荔,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泼菌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啦租,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哗伯,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年篷角,在試婚紗的時候發(fā)現(xiàn)自己被綠了焊刹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡恳蹲,死狀恐怖虐块,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉蕾,我是刑警寧澤贺奠,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站荆针,受9級特大地震影響敞嗡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜航背,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一喉悴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玖媚,春花似錦箕肃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至错森,卻和暖如春吟宦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涩维。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工殃姓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓦阐。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓蜗侈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睡蟋。 傳聞我的和親對象是個殘疾皇子踏幻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法戳杀,內(nèi)部類的語法该面,繼承相關(guān)的語法夭苗,異常的語法,線程的語...
    子非魚_t_閱讀 31,663評論 18 399
  • 反射庫提供了一個非常豐富且精心設(shè)計(jì)的工具集吆倦,以便能夠動態(tài)編寫能夠操縱Java代碼的程序听诸。這項(xiàng)功能被大量應(yīng)用于Jav...
    Steven1997閱讀 630評論 0 2
  • 1. Java中的多態(tài)性理解(注意與C++區(qū)分) Java中除了static方法和final方法(private方...
    小敏紙閱讀 1,444評論 0 19
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,206評論 1 44
  • 水蘭煙里兩相望蚕泽,只羨鴛鴦不羨天晌梨。 “楊大哥,這可是傳世情物须妻!”祝小山也呆了仔蝌。 綠珠冰雪聰明,自然看出了楊門用意荒吏,當(dāng)...
    木易國強(qiáng)閱讀 382評論 3 2