国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

《Java編程思想》筆記7.復(fù)用類

ningwang / 3554人閱讀

摘要:在類的構(gòu)造方法中。對(duì)基類構(gòu)造器的調(diào)用必須放到子類構(gòu)造器的第一行。約定用大寫字母下劃線命名規(guī)范空白空白指被聲明為但又未給定初值的域,但可以在構(gòu)造方法必須在域的定義處代碼塊或構(gòu)造器中對(duì)進(jìn)行賦值。

點(diǎn)擊進(jìn)入我的博客

復(fù)用代碼是Java眾多引人注目的功能之一,但要成為極具革命性的語(yǔ)言,僅僅能夠復(fù)制代碼并對(duì)之加以改變是不夠的,它還必須能夠做更多的事情。

7.1 組合
組合語(yǔ)法

就是在當(dāng)前類中產(chǎn)生現(xiàn)有類的對(duì)象。

toString()方法

每一個(gè)非基本類型的對(duì)象都有該方法,當(dāng)編譯器需要一個(gè)String但你只有一個(gè)對(duì)象時(shí),該方法會(huì)自動(dòng)調(diào)用。

初始化引用

編譯器并不是簡(jiǎn)單的為每一個(gè)引用都創(chuàng)建對(duì)象,因?yàn)檫@回增加不必要的負(fù)擔(dān)

在定義對(duì)象的時(shí)候初始化,這意味著在構(gòu)造方法之前被調(diào)用。

在類的構(gòu)造方法中。

就在正常使用這些對(duì)象之前——惰性初始化

使用實(shí)例初始化

7.2 繼承

使用extends關(guān)鍵字實(shí)現(xiàn)繼承

當(dāng)創(chuàng)建一個(gè)類時(shí)總是在繼承,除非明確指定從其他類繼承,否則就是隱式從Object繼承

繼承時(shí)會(huì)自動(dòng)得到基類中所有的域和方法

使用super.func()調(diào)用父類中的方法。

7.2.1 初始化基類

當(dāng)創(chuàng)建類一個(gè)子類的對(duì)象時(shí),該對(duì)象包含了一個(gè)基類的自對(duì)象。這個(gè)子對(duì)象與你用基類直接創(chuàng)建的對(duì)象是一樣的。二者區(qū)別在于,后者來自于外部,而基類的子對(duì)象被包裝在子類對(duì)象內(nèi)部。

對(duì)基類子對(duì)象對(duì)正確初始化:在子類構(gòu)造器中調(diào)用基類構(gòu)造器。Java會(huì)自動(dòng)在子類構(gòu)造器中插入對(duì)基類構(gòu)造器對(duì)調(diào)用。

編譯器強(qiáng)制你去初始化基類,但并不代表會(huì)初始化成員對(duì)象。

帶參數(shù)的構(gòu)造器

如果基類沒有默認(rèn)的無(wú)參構(gòu)造器,或者想調(diào)用一個(gè)帶參數(shù)的基類構(gòu)造器,就必須用關(guān)鍵字super顯式地編寫基類構(gòu)造器的語(yǔ)句。

對(duì)基類構(gòu)造器的調(diào)用必須放到子類構(gòu)造器的第一行。

7.3 代理

Java并沒有提供對(duì)代理對(duì)直接支持,這是繼承和組合的中庸之道。

代理:將一個(gè)成員對(duì)象放置于所需要的構(gòu)造的類中(像組合),但與此同時(shí)在新類中暴露該成員對(duì)象的相關(guān)方法(像繼承)。

使用代理可以有更多的控制力,因?yàn)槲覀兛梢赃x擇只暴露一個(gè)子集。

public class Test {
    TestDemo demo = new TestDemo();
    // 代理
    public void func() {
        demo.func();
    }
}

class TestDemo {
    void func() {}
}
7.4 結(jié)合使用組合和繼承 7.4.1 確保正確清理

一般情況下,清理并不是問題,僅需讓垃圾回收器完成該動(dòng)作就行。但當(dāng)必須親自處理清理(如文件的關(guān)閉)時(shí),就要多加小心。

因?yàn)椋厥掌骺赡苡肋h(yuǎn)也無(wú)法被調(diào)用,即時(shí)被調(diào)用,它是按照任何它想要的順序來回收對(duì)象。

最好的辦法是除了內(nèi)存以外,不能依賴?yán)厥掌魅プ鋈魏问隆?/strong>

如果需要清理,就自己寫一個(gè)清理方法,但不要使用finalize()。

清理語(yǔ)句盡量寫在finally代碼塊中。

7.4.2 名稱屏蔽

如果Java的基類已經(jīng)擁有某個(gè)已被多次重載的方法,那么在子類中重新定義該方法名稱并不會(huì)屏蔽其在基類中的任何版本。因此,無(wú)論是在該層或者它的基類中隊(duì)方法進(jìn)行定義,重載機(jī)制都可以正常工作。

可以使用@Override來表示要重寫父類方法。

7.5 在組合和繼承間選擇

組合和繼承都允許在新的類中放置子對(duì)象,組合是顯式地這樣做,而繼承是隱式地做。

繼承很重要但是并不意味著我們需要常常用他,如何判斷是否應(yīng)該使用繼承請(qǐng)參照兩個(gè)標(biāo)準(zhǔn):

如果是“is-a”的關(guān)系,那就使用繼承。如果是“has-a”的關(guān)系,那就使用組合。

是否需要向上轉(zhuǎn)型,如果必須向上轉(zhuǎn)型則必須使用繼承,否則應(yīng)該慎重考慮

7.6 protected關(guān)鍵字

在實(shí)際項(xiàng)目中,經(jīng)常會(huì)想要將某些事物盡可能對(duì)這個(gè)世界隱藏起來,但仍允許導(dǎo)出類的成員訪問它們。

盡管可以創(chuàng)建protected域成員,但最好的方式還是private,只有在真正需要的時(shí)候才使用protected關(guān)鍵字。

7.7 向上轉(zhuǎn)型

“為新類提供方法”并不是繼承技術(shù)最重要的方面,其最重要的方面是用來表現(xiàn)子類和基類之間的關(guān)系。

子類引用可以向上轉(zhuǎn)型成為基類引用,因?yàn)?strong>派生類一定具有基類的方法。類接口唯一可能發(fā)生的事情是丟失方法,而不是獲取它們。

7.8 final關(guān)鍵字 7.8.1 final數(shù)據(jù)
final變量

final基本數(shù)據(jù)類型:表示數(shù)據(jù)是不可變的常量

final對(duì)象引用:引用與對(duì)象的關(guān)聯(lián)關(guān)系不可變,但可以對(duì)對(duì)象進(jìn)行操作。

final static約定用大寫字母+下劃線命名規(guī)范

空白final

空白final指被聲明為final但又未給定初值的域,但可以在構(gòu)造方法

必須在域的定義處、static代碼塊或構(gòu)造器中對(duì)final進(jìn)行賦值。

final參數(shù)

Java允許在參數(shù)列表中將參數(shù)指明為final

修飾對(duì)象參數(shù):意味著無(wú)法在方法中修改參數(shù)引用的對(duì)象

修飾基本類型:可以使用但無(wú)法修改此參數(shù)

7.8.2 final方法

把方法鎖定,禁止繼承類修改它(即不會(huì)被重寫)

在JavaSE5之前,使用final可以提高效率,但目前已過時(shí)

final和private關(guān)鍵字

類中所有private方法都隱式的指定是final的,在private方法前添加final是沒有額外意義的。

private修飾的方法,不屬于基類接口一部分,他僅僅是隱藏在類中的一部分代碼。因此如果你在導(dǎo)出類中“覆蓋”了基類的private方法,其實(shí)并沒有覆蓋private方法,而產(chǎn)生了一個(gè)新方法。

7.8.3 final類

final放在class前做修飾,表明該類無(wú)法進(jìn)行繼承

final類中的域和普通類的域并無(wú)差別

final類隱式的將該類中所有的方法指定為final,所以在final類中給方法添加final關(guān)鍵詞沒有意義。

7.8.4 final的忠告

要考慮清楚!!!

7.9 初始化及類的加載

每個(gè)類的編譯代碼.class都存在于獨(dú)立的文件中,該文件只在需要的使用程序代碼時(shí)才會(huì)被加載。

按照父類到子類的順序加載static變量

構(gòu)造子類對(duì)象時(shí),先構(gòu)造父類對(duì)象。

public class Test extends TestParents {
    // (a) static屬性
    static String staticProperty;

    // (b) 構(gòu)造方法
    public Test() {
        System.out.println("Test constructor");
    }

    // (c) static代碼塊
    {
        staticProperty = print("Test static property");
        System.out.println("Test static");
    }
    
    // (d) 非static代碼屬性
    String property = print("Test property");

    public static void main(String[] args) {
        // (1):System.out.println(Test.staticProperty);
        // TestParents static property
        // null(因?yàn)閟tatic代碼塊中的代碼要?jiǎng)?chuàng)建對(duì)象才執(zhí)行)
        // (2):Test test = new Test();
        // TestParents static property
        // TestParents property
        // TestParents static
        // TestParents constructor
        // Test static property
        // Test static
        // Test property
        // Test constructor
    }
}

class TestParents {
    static String staticProperty = print("TestParents static property");

    String property = print("TestParents property");

    {
        System.out.println("TestParents static");
    }

    public TestParents() {
        System.out.println("TestParents constructor");
    }

    static String print(String str) {
        System.out.println(str);
        return str;
    }
}
靜態(tài)代碼塊和靜態(tài)變量

靜態(tài)變量 >> 靜態(tài)代碼塊

代碼塊(注意不是靜態(tài)代碼塊)、構(gòu)造方法、非static屬性

三者順序:代碼塊 == 非static屬性 >> 構(gòu)造方法;即代碼塊和非static屬性按照代碼中順序排序,構(gòu)造函數(shù)在最后面

上述Test類的代碼,反編譯后的結(jié)果如下所示:

public Test()
    {
        staticProperty = print("Test static property");
        System.out.println("Test static");
        property = print("Test property");
        System.out.println("Test constructor");
    }
7.10 總結(jié)

優(yōu)先選擇組合和代理,必要時(shí)才使用繼承。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72176.html

相關(guān)文章

  • (CZ深入淺出Java基礎(chǔ))設(shè)計(jì)模式筆記

    摘要:在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。其實(shí)就是說在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。使用設(shè)計(jì)模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、面向?qū)ο笏枷朐O(shè)計(jì)原則 1.單一職責(zé)原則 其實(shí)就是開發(fā)人員經(jīng)常說的高...

    李昌杰 評(píng)論0 收藏0
  • Java編程思想筆記9.接口

    摘要:抽象類和抽象方法抽象方法這種方法是不完整的,僅有聲明而沒有方法。創(chuàng)建抽象類和抽象方法非常有用,因?yàn)樗麄兛梢允估鄣某橄笮悦鞔_起來,并告訴用戶和編譯器打算怎樣來使用它們。接口用于建立類于類之間的協(xié)議。與抽象類相同,防止客戶端程序員創(chuàng)建該類對(duì)象。 點(diǎn)擊進(jìn)入我的博客 接口和內(nèi)部類為我們提供了一種將接口與實(shí)現(xiàn)分離的更加結(jié)構(gòu)化的方法。 9.1抽象類和抽象方法 抽象方法:這種方法是不完整的,僅有...

    JessYanCoding 評(píng)論0 收藏0
  • Java編程思想》讀后總結(jié)(一)

    摘要:前言編程思想這本書,陸陸續(xù)續(xù)讀了年,終于基本都瀏覽了一遍。每個(gè)對(duì)象對(duì)外暴露接口,程序通過對(duì)象暴露的接口向?qū)ο蟀l(fā)送消息,獲取該對(duì)象的服務(wù)能力。異常處理異常處理,為編寫程序階段提供了一種預(yù)見性的防止程序崩潰的出路。 前言 《Java編程思想》這本書,陸陸續(xù)續(xù)讀了1年,終于基本都瀏覽了一遍。通過這本書,試圖理解作者的想法,才真的體會(huì)到Java思想。感謝本書的作者,不僅講述了java的語(yǔ)法,更...

    hufeng 評(píng)論0 收藏0
  • Java編程思想》讀書筆記-對(duì)象導(dǎo)論

    摘要:而面向?qū)ο髣t是向程序員提供表示問題空間中元素的工具,我們將問題空間中的元素及其在解空間中的表示稱為對(duì)象。為什么要把對(duì)象看作是服務(wù)提供者呢這是將問題分解為對(duì)象集合的一種合理方式。職能太多,可能會(huì)導(dǎo)致對(duì)象的內(nèi)聚性降低。在試圖將子類對(duì)象當(dāng)作其基類 計(jì)算機(jī)是頭腦延伸的工具,是一種不同類型的表達(dá)媒體。本文以背景性的和補(bǔ)充性的材料,介紹包括開發(fā)方法概述在內(nèi)的面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-orie...

    NickZhou 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來。注意中,對(duì)象一定是通過類的實(shí)例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<