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

前言

HI好港,歡迎來(lái)到《每周一博》愉镰。今天是十一月第二周,我給大家簡(jiǎn)單分享一下Java創(chuàng)建一個(gè)對(duì)象的幾種方式钧汹。

  1. 使用new關(guān)鍵字:
Student student = new Student();

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

使用new關(guān)鍵字創(chuàng)建對(duì)象拔莱,實(shí)際上是做了兩個(gè)工作碗降,一是在內(nèi)存中開(kāi)辟空間,二是初始化對(duì)象塘秦。但是new 關(guān)鍵字只能創(chuàng)建非抽象對(duì)象讼渊。

  1. 通過(guò)反射創(chuàng)建對(duì)象:

對(duì)于任意一個(gè)正在運(yùn)行的類,通過(guò)反射都能動(dòng)態(tài)獲取到它的屬性和方法尊剔。反射創(chuàng)建對(duì)象分為兩種方式:
A. 使用Class類的newInstance()方法爪幻,
B. 使用Constructor類的newInstatnce()方法。

Student student2 = (Student)Class.forName("根路徑.Student").newInstance(); 
Student stu = Student.class.newInstance();

Constructor<Student> constructor =Student.class.getInstance(); 
Student stu = constructor.newInstance(); 

兩者區(qū)別在于:
Class.newInstance() 只能夠調(diào)用無(wú)參的構(gòu)造函數(shù)须误,即默認(rèn)的構(gòu)造函數(shù)挨稿;
Constructor.newInstance() 可以根據(jù)傳入的參數(shù),調(diào)用任意構(gòu)造構(gòu)造函數(shù)京痢。

事實(shí)上Class的newInstance方法內(nèi)部調(diào)用Constructor的newInstance方法奶甘,這也是眾多框架Spring、Hibernate祭椰、Struts等使用后者的原因甩十。

  1. 使用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接口并實(shí)現(xiàn)其定義的clone方法橄霉,這也是原型模式的應(yīng)用窃爷。

Student stu2 = <Student>stu.clone();

克隆模式有深拷貝和淺拷貝之分,淺拷貝下引用類型是共用的姓蜂,一改全改按厘,所以需要對(duì)引用行的字段也進(jìn)行拷貝,比如我們對(duì)Student里面課程的集合進(jìn)行深拷貝钱慢。

   @override
    public Student clone() {   
        try {   
            Student stu = (Student) super.clone();
            stu.classes = (ArrayList<String>) this.classes.clone();
            return stu;   
        } catch (CloneNotSupportedException e) {   
            return null;   
        }   
    }   

克隆的優(yōu)點(diǎn)是直接在內(nèi)存中拷貝二進(jìn)制流逮京,比new一個(gè)對(duì)象性能要好很多,特別是再循環(huán)體內(nèi)產(chǎn)生大量的對(duì)象時(shí)束莫,缺點(diǎn)是構(gòu)造函數(shù)不會(huì)執(zhí)行懒棉,所以需要自己權(quán)衡考慮。

  1. 使用反序列化:

當(dāng)我們序列化和反序列化一個(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接口,然后在使用ObjectInputStream的readObject方法來(lái)創(chuàng)建對(duì)象怀各。

// 序列化
ObjectInputStream in = new ObjectInputStream (new FileInputStream("data.obj"));
// 反序列化
Student stu3 = (Student)in.readObject();

結(jié)尾:

本周給大家簡(jiǎn)單介紹了Java創(chuàng)建對(duì)象的四種方式倔韭。感謝大家的閱讀,我們下周再見(jiàn)瓢对。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐肢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沥曹,更是在濱河造成了極大的恐慌份名,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓美,死亡現(xiàn)場(chǎng)離奇詭異僵腺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)壶栋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門辰如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贵试,你說(shuō)我怎么就攤上這事琉兜】” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵豌蟋,是天一觀的道長(zhǎng)廊散。 經(jīng)常有香客問(wèn)我,道長(zhǎng)梧疲,這世上最難降的妖魔是什么允睹? 我笑而不...
    開(kāi)封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮幌氮,結(jié)果婚禮上缭受,老公的妹妹穿的比我還像新娘。我一直安慰自己该互,他們只是感情好米者,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著宇智,像睡著了一般蔓搞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上普筹,一...
    開(kāi)封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天败明,我揣著相機(jī)與錄音隘马,去河邊找鬼太防。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酸员,可吹牛的內(nèi)容都是我干的蜒车。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼幔嗦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酿愧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起邀泉,我...
    開(kāi)封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嬉挡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后汇恤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體庞钢,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年因谎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了基括。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡财岔,死狀恐怖风皿,靈堂內(nèi)的尸體忽然破棺而出河爹,到底是詐尸還是另有隱情,我是刑警寧澤桐款,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布咸这,位于F島的核電站,受9級(jí)特大地震影響鲁僚,放射性物質(zhì)發(fā)生泄漏炊苫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一冰沙、第九天 我趴在偏房一處隱蔽的房頂上張望侨艾。 院中可真熱鬧,春花似錦拓挥、人聲如沸唠梨。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)当叭。三九已至,卻和暖如春盖灸,著一層夾襖步出監(jiān)牢的瞬間蚁鳖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工赁炎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醉箕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓徙垫,卻偏偏與公主長(zhǎng)得像讥裤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姻报,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • Java中有5種創(chuàng)建對(duì)象的方式己英,如下所示: 1.使用new關(guān)鍵字 這是最常見(jiàn)也是最簡(jiǎn)單的創(chuàng)建對(duì)象的方式了。通過(guò)這種...
    Jk_zhuang閱讀 408評(píng)論 0 1
  • 原先了解的Java創(chuàng)建對(duì)象有四種方式: (1)用new 語(yǔ)句創(chuàng)建對(duì)象吴旋,這是最常用的創(chuàng)建對(duì)象方法损肛。 (2)運(yùn)用反射手...
    SithCait閱讀 186評(píng)論 0 0
  • 顯式創(chuàng)建對(duì)象 有4種顯式地創(chuàng)建對(duì)象的方式: 用new語(yǔ)句創(chuàng)建對(duì)象,這是最常用的創(chuàng)建對(duì)象的方式荣瑟。 運(yùn)用反射手段治拿,調(diào)用...
    不知名的蛋撻閱讀 430評(píng)論 0 0
  • java中創(chuàng)建對(duì)象有幾種方式? 使用new關(guān)鍵字 如 User user=new User(); 執(zhí)行這條語(yǔ)句褂傀,j...
    芋頭888閱讀 2,427評(píng)論 0 1
  • 從面相過(guò)程到面相對(duì)象的轉(zhuǎn)變忍啤,是由一句“萬(wàn)物皆對(duì)象”開(kāi)始的。那么所說(shuō)的這個(gè)對(duì)象是如何產(chǎn)生的?下面同波,我們就來(lái)看看鳄梅,在J...
    1601閱讀 2,187評(píng)論 0 0