瘋狂Java講義-面向?qū)ο螅ㄉ希?/h1>

面向?qū)ο螅ㄉ希?/h1>

本章思維導(dǎo)圖

3-0面向?qū)ο螅ㄉ希?png

類和對象

定義類

[修飾符] class 類名 {
    // 初始化代碼塊
    // 構(gòu)造器
    // 成員變量
    // 方法
}

定義成員變量

[修飾符] 類型 成員變量名 [= 默認值];

  • 修飾符
    • public
    • protected
    • private
    • static
    • final

定義方法

[修飾符] 返回值類型 方法名 ( 形參列表 ) {
    // 方法體
};
  • 修飾符
    • public
    • protected
    • private
    • static
    • final
    • abstract

定義構(gòu)造器

[修飾符] 構(gòu)造器名 ( 形參列表 ) {
    // 構(gòu)造器體
};
  • 修飾符
    • public
    • protected
    • private
  • 構(gòu)造器名:必須和類名相同

對象、引用和指針

  • 引用存儲在棧內(nèi)存
  • 對象存儲在堆內(nèi)存
  • 垃圾回收機制
    • 當(dāng)堆內(nèi)存的對象沒有任何引用變量指向時,java將自動釋放該對象的內(nèi)存
  • this
    • 構(gòu)造器中引用該構(gòu)造器正在初始化的對象
    • 在方法中引用調(diào)用該方法的對象
    • 在方法中this作為返回值返回調(diào)用該方法的對象娄帖,可以連續(xù)調(diào)用方法

方法

  • 形參參數(shù)可變的方法
    • type... variable;
      • 多個參數(shù)值被當(dāng)成數(shù)組傳入
    • type[] variable;
      • 參數(shù)傳入時必須是一個數(shù)組的引用類型變量
  • 遞歸方法
  • 方法重載
    • 確定一個方法的三要素
      • 調(diào)用者
      • 方法名
      • 形參列表
    • 要求:同一個類中方法名相同,參數(shù)列表不同

成員變量和局部變量

成員變量

  • 實例變量(不以static修飾)
  • 類變量(以static修飾)

局部變量

  • 形參
  • 方法局部變量
  • 代碼塊局部變量

隱藏和封裝

封裝(encapsulation)

訪問控制符

  • private 當(dāng)前類訪問權(quán)限
  • default 默認:包訪問權(quán)限
  • protected 子類訪問權(quán)限
  • public 公共訪問權(quán)限
    • 源文件名必須和類名相同

package茫船、import、import static

  • package
    • package packageName;
      • 放在第一行
    • 編譯扭屁、運行
      • javac -d . fileName.java
      • java pakcageName.className
    • 調(diào)用構(gòu)造器時也需要加上包前綴
    • package.subPackage.ClassName variable = new package.subPackage.ClassName()算谈;
  • import
    • 向某個java文件導(dǎo)入指定包層次下的某個類或全部類
    • 導(dǎo)入單個類:
      import package.subPackage...ClassName;
    • 導(dǎo)入全部類:
      import package.subPackage...*;
  • import static
    • 導(dǎo)入指定類的單個或全部的靜態(tài)成員變量、方法
      • 導(dǎo)入指定類的單個靜態(tài)成員變量料滥、方法
      • import static package.subPackage...ClassName.fieldName | methodName;
    • 導(dǎo)入指定類的全部靜態(tài)成員變量然眼、方法
      • import static package.subPackage...ClassName.*;

Java常用包

  • java.lang :Java的核心類,系統(tǒng)自動導(dǎo)入
  • java.util :大量的工具類/接口和集合框架類/接口
  • java.net :網(wǎng)絡(luò)編程相關(guān)的類/接口
  • java.io :輸入/輸出的相關(guān)的類/接口
  • java.text :格式化相關(guān)的類
  • java.sql :進行JDBC數(shù)據(jù)庫編程的相關(guān)類/接口
  • java.awt :抽象窗口工具集的相關(guān)類/接口葵腹,主要用于構(gòu)建圖形界面(GUI)程序
  • java.swing :swing圖形用戶界面編程的相關(guān)類/接口高每,用于構(gòu)建平臺無關(guān)的圖形界面(GUI)程序

構(gòu)造器

使用構(gòu)造器執(zhí)行初始化

構(gòu)造器是一個特殊的方法,這個方法用于創(chuàng)建實例時執(zhí)行初始化

構(gòu)造器重載

使用this在一個構(gòu)造器中調(diào)用另一個構(gòu)造器

this(形參列表);

繼承

[修飾符]  class subClass  extends  superClass{
    // 類體
}

重寫(override)父類的方法

  • 規(guī)則:方法名相同践宴、形參列表相同鲸匿、子類方法返回值類型應(yīng)比父類更小或相等、子類方法聲明拋出的異常類應(yīng)比父類更小或相等阻肩、子類方法的訪問權(quán)限應(yīng)比父類方法更大或相等
  • 覆蓋方法和被覆蓋方法要么都是類方法带欢,要么都是實例方法
  • 調(diào)用父類被覆蓋的方法
    • 實例方法:super.被覆蓋的實例方法()
    • 類方法:父類名.被覆蓋的類方法()

調(diào)用父類構(gòu)造器

  • super(形參列表)
  • 子類總會調(diào)用父類的構(gòu)造器

多態(tài)

引用變量兩種類型:編譯時類型、運行時類型

引用變量在編譯階段只能調(diào)用其編譯時類型的所具有的方法,但運行時則執(zhí)行它運行時類型所具有的方法

子類是特殊的父類洪囤,把一個子類對象賦值給父類的引用變量,系統(tǒng)自動完成向上轉(zhuǎn)型

強制類型轉(zhuǎn)換

  • 為了程序健壯性撕氧,在強制類型轉(zhuǎn)換前先使用instanceof運算符判斷是否可以轉(zhuǎn)換
  • instanceof運算符
    • 判斷一個對象是否為一個類的實例

繼承與組合

  • 繼承
    • 繼承破壞了父類的封裝性瘤缩,子類可以直接訪問父類的內(nèi)部信息,造成了子類和父類的耦合伦泥,可能會出現(xiàn)子類惡意篡改父類的方法
    • 父類剥啤、子類、其他類
      • 父類中那些僅為輔助其他的工具方法不脯,應(yīng)該使用private訪問控制符府怯,不讓子類訪問改方法
      • 父類中的方法需要被外部類調(diào)用,必須使用public修飾防楷,但又不希望子類重寫該方法牺丙,可以使用final修飾符
      • 如果希望父類的某個方法被子類重寫,但不希望被其他類自由訪問复局,使用protected來修飾
      • 不要在父類構(gòu)造器中調(diào)用被子類重寫的方法
  • 在父類構(gòu)造器中調(diào)用了被重寫的方法冲簿,在new子類對象的時候,會自動調(diào)用父類構(gòu)造器亿昏,在父類構(gòu)造器中調(diào)用的方法時子類的峦剔,會引發(fā)一些錯誤
  • 如果僅僅需要復(fù)用一個類,可以用組合

組合

  • 把舊類對象作為新類的成員變量組合進來
  • 繼承表達的是一種“是(is-a)”的關(guān)系角钩,而組合表達的是“有(has-a)”的關(guān)系

初始化塊

初始化塊是類的第4種成員變量吝沫,一個類里可以有多個初始化塊,先定義的先執(zhí)行

[修飾符] {
    // 初始化代碼
}

修飾符只能是static

  • 初始化塊在創(chuàng)建對象時執(zhí)行递礼,然后執(zhí)行構(gòu)造器
  • 編譯java類后惨险,會將初始化塊代碼還原到每個構(gòu)造器中,放在最前面
  • 靜態(tài)初始化塊脊髓,使用static修飾的初始化塊
  • 靜態(tài)初始化塊實在類初始化階段執(zhí)行平道,而不是在創(chuàng)建對象時才執(zhí)行
    • 靜態(tài)成員不能訪問非靜態(tài)成員,即不能對實例變量進行初始化

執(zhí)行順序

  • 類初始化階段
    • 最頂層父類的靜態(tài)初始化塊->依次向下->當(dāng)前類的初始化塊
  • 對象初始化階段
    • 最頂層父類的初始化塊->最頂層父類的構(gòu)造器->依次向下->當(dāng)前類初始化塊供炼、當(dāng)前類構(gòu)造器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末一屋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子袋哼,更是在濱河造成了極大的恐慌冀墨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涛贯,死亡現(xiàn)場離奇詭異诽嘉,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門虫腋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骄酗,“玉大人,你說我怎么就攤上這事悦冀∏鞣” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵盒蟆,是天一觀的道長踏烙。 經(jīng)常有香客問我,道長历等,這世上最難降的妖魔是什么讨惩? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮寒屯,結(jié)果婚禮上荐捻,老公的妹妹穿的比我還像新娘。我一直安慰自己寡夹,他們只是感情好靴患,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著要出,像睡著了一般鸳君。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上患蹂,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天或颊,我揣著相機與錄音,去河邊找鬼传于。 笑死囱挑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沼溜。 我是一名探鬼主播平挑,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼系草!你這毒婦竟也來了通熄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤找都,失蹤者是張志新(化名)和其女友劉穎唇辨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體能耻,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡赏枚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年亡驰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饿幅。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡凡辱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栗恩,到底是詐尸還是另有隱情透乾,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布摄凡,位于F島的核電站续徽,受9級特大地震影響蚓曼,放射性物質(zhì)發(fā)生泄漏亲澡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一纫版、第九天 我趴在偏房一處隱蔽的房頂上張望床绪。 院中可真熱鬧,春花似錦其弊、人聲如沸癞己。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痹雅。三九已至,卻和暖如春糊识,著一層夾襖步出監(jiān)牢的瞬間绩社,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工赂苗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留愉耙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓拌滋,卻偏偏與公主長得像朴沿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子败砂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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