《Java編程思想》筆記——面向?qū)ο蠛皖?/h1>

1、面向?qū)ο蟪绦蛟O(shè)計簡介

面向?qū)ο笫且环N程序設(shè)計方法,或者是程序設(shè)計規(guī)范,其基本思想是使用對象、類、繼承、封裝、多態(tài)等基本概念來進(jìn)行程序設(shè)計。 面向?qū)ο笫且环N符合人們思考習(xí)慣的思想,可以將復(fù)雜的事情簡單化,將程序員從執(zhí)行者轉(zhuǎn)換成了指揮者。
面向?qū)ο蟮奶卣鳎?br> ? 封裝(encapsulation)
? 繼承(inheritance)
? 多態(tài)(polymorphism)

2.java單繼承的優(yōu)點:

相比于C++的多繼承,java只支持類的單繼承,java中的所有類的共同基類是Object類,Object類java類樹的唯一根節(jié)點,這種單繼承有以下好處:

  1. 單繼承可以確保所有的對象擁有某種共同的特性,這樣對于JVM虛擬機(jī)對所有的類進(jìn)行系統(tǒng)級的操作將提供方便,所有的java對象可以方便地在內(nèi)存堆棧中創(chuàng)建,傳遞參數(shù)也變的更加方便簡單。
  2. java的單繼承使得實現(xiàn)垃圾回收器功能更加容易,因為可以確保JVM知道所有對象的類型信息。

3.多態(tài):

在面向?qū)ο缶幊讨校宇愔袚碛泻透割愊嗤椒ê灻姆椒ǚQ為子類方法覆蓋父類方法,當(dāng)調(diào)用子類方法的某個操作時,不必明確知道子類的具體類型,只需要將子類類型看作是父類的引用調(diào)用其操作方法,在運行時,JVM會根據(jù)引用對象的具體子類類型而調(diào)用應(yīng)該的方法,這就是多態(tài)。
多態(tài)不但能夠改善代碼的組織結(jié)構(gòu)和可讀性,還能夠創(chuàng)建可拓展性的程序。

多態(tài)的基礎(chǔ)是java面向?qū)ο缶幊痰耐斫壎C(jī)制。編程中有如下兩種綁定機(jī)制:

  1. 前期綁定:一般在非面向?qū)ο缶幊陶Z言中使用,在程序編譯時即計算出具體調(diào)用方法體的內(nèi)存地址。
  2. 動態(tài)綁定/運行時綁定:面向?qū)ο缶幊陶Z言中經(jīng)常使用,在程序編譯時無法計算出具體調(diào)用方法體的內(nèi)存地址,只進(jìn)行方法參數(shù)類型和返回值類型的校驗,在運行時才能確定具體要調(diào)用方法體的內(nèi)存地址。Java中除了static和final方法之外,其他所有方法都是后期綁定。

4.類型轉(zhuǎn)換:

Java中有兩種常見的類型轉(zhuǎn)換:向上類型轉(zhuǎn)換(upcast)和向下類型轉(zhuǎn)換(downcast):

  1. 向上類型轉(zhuǎn)換(upcast):
    向上類型轉(zhuǎn)換是將子類對象強制類型轉(zhuǎn)換為父類類型,經(jīng)典用法是面向?qū)ο蟮亩鄳B(tài)特性。向上類型轉(zhuǎn)換時,子類對象的特性將不可見,只有子類從父類繼承的特性仍然保持可見,向上類型轉(zhuǎn)換時編譯器會自動檢查是否類型兼容,通常是安全的。
  2. 向下類型轉(zhuǎn)換:
    向下類型轉(zhuǎn)換是將父類類型強制轉(zhuǎn)換為子類類型,轉(zhuǎn)換過后父類中不可見的子類特性又恢復(fù)可見性,向下類型轉(zhuǎn)換時,編譯器無法自動檢測是否類型兼容,往往會產(chǎn)生類型轉(zhuǎn)換錯誤的運行時異常,通常不安全。

向上轉(zhuǎn)型時,任何字段訪問操作都是由編譯器解析,因此不是多態(tài)的。

5.方法重載(overloading)

方法同名,參數(shù)列表不同稱為方法重載,注意方法的返回值類型不同不能作為方法重載。

6.在組合 與 繼承 之間選擇

  1. is-a繼承:一個類繼承具有相似功能的另一個類,根據(jù)需要在所繼承的類基礎(chǔ)上進(jìn)行擴(kuò)展。
    優(yōu)點:具有共同屬性和方法的類可以將共享信息抽象到父類中,增強代碼復(fù)用性,同時也是多態(tài)的基礎(chǔ)。
    缺點:子類中擴(kuò)展的部分對父類不可見,另外如果共性比較少的時候使用繼承會增加冗余代碼;

  2. has-a組合:has-a組合是在一個類中引用另一個類作為其成員變量。
    優(yōu)點:可擴(kuò)展性和靈活性高。在對象組合關(guān)系中應(yīng)優(yōu)先考慮has-a組合關(guān)系。
    缺點:具有共性的類之間看不到派生關(guān)系。

組合技術(shù)通常用于想在新類中使用現(xiàn)有類的功能而非它的接口。

7.java即時編譯技術(shù)(JIT):

Java的JIT是just-in-time complier技術(shù),JIT技術(shù)是java代碼部分地或全部轉(zhuǎn)換成本地機(jī)器碼程序,不再需要JVM解釋,執(zhí)行速度更快。
當(dāng)一個”.class”的類文件被找到時,類文件的字節(jié)碼被調(diào)入內(nèi)存中,這時JIT編譯器編譯字節(jié)碼代碼。
JIT有兩個不足:

  1. JIT編譯轉(zhuǎn)換需要花費一些時間,這些時間貫穿于程序的整個生命周期。
  2. JIT增加了可執(zhí)行代碼的size,相比于壓縮的字節(jié)碼,JIT代碼擴(kuò)展了代碼的size,這有可能引起內(nèi)存分頁,進(jìn)而降低程序執(zhí)行速度。

對JIT不足的一種改進(jìn)技術(shù)是延遲評估(lazy evaluation):其基本原理是字節(jié)碼并不立即進(jìn)行JIT編譯除非必要,在最近的JDK中采用了一種類似延遲JIT的HotSpot方法對每次執(zhí)行的代碼進(jìn)行優(yōu)化,代碼執(zhí)行次數(shù)越多,速度越快。

8.final關(guān)鍵字

  1. 一個既是static又是final的字段只占據(jù)一段不能改變的存儲空間。對對象的引用運用final時,該引用無法再指向另一個對象,然而對象本身是可以被修改的。
  2. 定義為final的字段必須在字段的定義處或者構(gòu)造方法中進(jìn)行賦值,從而使得final字段在使用前總是被初始化。
  3. 類中所有的private方法都隱式地指定為是final的,以防止任何繼承類修改它的含義。
  4. final類禁止繼承,所以final類中所有的方法都隱式指定是final的。
  5. 在構(gòu)造器內(nèi)唯一能夠安全調(diào)用的那些方法是基類中的final方法,非final方法可能會使用還未初始化的字段,而出現(xiàn)異常。

9.抽象類

  • 包含抽象方法的類叫做抽象類,但抽象類不一定含有抽象方法。繼承于抽象類的類必須實現(xiàn)抽象基類中的抽象方法,否則該類也必須定義為抽象類。
  • 抽象類不能實例化任何對象。

10.接口

  • 可以繼承任意多個接口,并可以向上轉(zhuǎn)型為每個接口,因為每一個接口都是一個獨立的類型。
  • 接口彼此之間可以嵌套。
  • 嵌套在另一個接口中的接口自動就是public的,而不能聲明為private的。
  • 當(dāng)實現(xiàn)某個接口時,并不需要實現(xiàn)嵌套在其內(nèi)的任何接口。

11.內(nèi)部類

  • 內(nèi)部類可以把一些邏輯相關(guān)的類組織在一起,并控制位于內(nèi)部的類的可視性。
  • 內(nèi)部類還擁有其外圍類的所有元素的訪問權(quán)。構(gòu)建內(nèi)部類對象時,需要一個指向其外圍類對象的引用,在擁有外部類對象之前是不可能創(chuàng)建內(nèi)部類對象的。
  • 在方法和作用域內(nèi)可以定義內(nèi)部類,此使用方式把類名去掉就是匿名內(nèi)部類;由于此種內(nèi)部類在方法或作用域外不可見,通常向上轉(zhuǎn)型對此類的對象進(jìn)行引用。
  • 匿名內(nèi)部類不可能有命名的構(gòu)造器;匿名內(nèi)部類既可以拓展類,也可以實現(xiàn)接口,但是不能兩者兼?zhèn)洌胰绻菍崿F(xiàn)接口,也只能實現(xiàn)一個接口。
  • 因為內(nèi)部類的構(gòu)造器必須連接到指向其外圍類對象的引用,所以在繼承內(nèi)部類的時候,不能使用默認(rèn)的構(gòu)造器,而需要傳遞一個指向外圍類對象的引用,并且必須在構(gòu)造器內(nèi)調(diào)用outer.super();

12.嵌套類

  • 將內(nèi)部類聲明為static,就稱為嵌套類。嵌套類不需要外圍類的對象,因此不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。
  • 普通內(nèi)部類的字段和方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段,也不能包含嵌套類。
  • 接口內(nèi)部的類自動就是嵌套類,因為接口內(nèi)的任何字段方法類都自動地是public和static的;放置在接口內(nèi)部的類,甚至可以實現(xiàn)其外圍接口。

持續(xù)完善補充!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,604評論 2 380

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