瘋狂的java進(jìn)階之01搬磚從磚頭(對象)開始

搬磚也要搬的不一般扭屁。

一算谈、前言

歲月匆匆而來,時光匆匆而去料滥。轉(zhuǎn)眼間然眼,做java開發(fā)已有3、4年的時間了葵腹,期間做過后臺開發(fā)高每,寫過前端web屿岂,而最主要的則是做android開發(fā)。語言也接觸過好多種鲸匿,什么Python爷怀、Kotlin、swift晒骇、Js霉撵、C等等,而最讓我迷戀的還是個java洪囤。
java的優(yōu)點我便不多說了徒坡,網(wǎng)上有太多的解釋。而本文則是我三年來對java的理解瘤缩,以及對網(wǎng)上收集資料的總結(jié)喇完,是最java進(jìn)階的知識整理。

進(jìn)入編程的第四年剥啤,不應(yīng)該僅僅處于java的使用锦溪,而java的理解才是一道不得不邁的一道坎。

二府怯、java第一步:啥是面向?qū)ο?/h2>

2種主流的開發(fā)方法:結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計刻诊;

* 結(jié)構(gòu)化程序設(shè)計:

理解:

結(jié)構(gòu)化程序設(shè)計就是將程序功能,進(jìn)行一層一層的剝離牺丙,進(jìn)行功能細(xì)分则涯。一個細(xì)分功能就是一個函數(shù),然后再由上層函數(shù)進(jìn)行調(diào)用冲簿,在函數(shù)的層層調(diào)用之后粟判,最終由主函數(shù)進(jìn)行調(diào)用,實現(xiàn)完整的功能峦剔。

原則:

自頂向下档礁、逐步求精、模塊化吝沫。

* 面向?qū)ο蟪绦蛟O(shè)計:

理解:

1.什么是對象呻澜?
對象是實際存在的該類事物的個體,即對象是類的實例化野舶,現(xiàn)實中的萬物都可以理解為一個對象易迹;
如:一輛汽車,將其抽象為具體的屬性平道,即速度睹欲、大小、顏色、座位數(shù)等屬性窘疮,以及具體的行為袋哼,即加速、剎車闸衫、載客等行為涛贯。
2.什么是對象?
類是具有共同屬性和行為的一組對象的抽象蔚出。類是對象的抽象表現(xiàn)弟翘,是對象在代碼中的具體表現(xiàn)形式;它必須具有屬性和行為骄酗,才是一個完整的對象稀余。
3.對象就是類?

對象是類的實例化趋翻,而類是對象的抽象睛琳;

類是面向?qū)ο缶幊讨械淖钚〉膯卧穷惒⒉灰欢ㄊ且粋€對象踏烙,而類只是對象的一種表現(xiàn)形式师骗;
對象可以是一個類,也可以是一個函數(shù)讨惩,或者多個類的集合辟癌,即萬物皆可為對象;
而有些類在嚴(yán)格的意義上來講荐捻,卻并不是一個對象愿待;
如: 一個僅僅包含常量的類,就不是一個對象靴患。它僅僅具有屬性缺不具有行為。

4.面向?qū)ο蟮奶卣?/strong>

封裝要出、繼承鸳君、多態(tài)

  • 封裝:

是把對象的屬性和行為結(jié)合成一個整體,對細(xì)節(jié)隱藏患蹂,對操作開放或颊。

如:一臺智能手機(jī),你不要關(guān)心手機(jī)內(nèi)部有什么传于?怎么運(yùn)行的程序囱挑?你只要點亮屏幕,就可以實現(xiàn)打電話沼溜、玩游戲平挑、聊天等功能。

java的封裝由權(quán)限修飾符:private、public通熄、protected唆涝、default實現(xiàn);
  • 繼承:

是對一系列對象的公共屬性和行為進(jìn)行提取封裝唇辨,而后由其他類繼承廊酣,并實現(xiàn)自己獨(dú)有的屬性或行為。
父類獨(dú)立于子類赏枚,而子類則依賴于父類亡驰。

如:水果是一個父類,其具有酸饿幅、甜等屬性凡辱,也具有吃、腐爛等行為诫睬;而橘子也是水果的一種煞茫,它不僅具有父類的屬性,同時還具有剝皮的特殊行為摄凡。因此续徽,橘子是水果的一個子類,它實現(xiàn)了父類的所有方法亲澡,但要獨(dú)立實現(xiàn)剝皮的行為钦扭。
簡單說,沒有橘子床绪,水果依舊還是水果客情。但是,橘子如果不能吃癞己,那他就一定不是水果痹雅。

java的繼承使用extends或implements進(jìn)行標(biāo)記绩社,通過override(重寫)標(biāo)記父類的行為愉耙,通過super實現(xiàn)父類的方法猜谚。
  • 多態(tài):

是對象的同種行為的不同表現(xiàn)形式。
多態(tài)僅僅針對行為祭隔,與屬性無關(guān)。
java的多態(tài)可以劃分為同一個類中的多態(tài)(重載),以及父類與子類間的多態(tài)(重寫)

如:‘吃’這個行為桩撮【铣剩可以表現(xiàn)為旱爆,吃飯、吃水果、吃茶等等。

java的多態(tài),由重寫(override)和重載(overload)來實現(xiàn);

三安岂、對象的番外篇

1.權(quán)限修飾符

修飾符 類內(nèi)部 本包 子類 外部包
public 可訪問 可訪問 可訪問 可訪問
protected 可訪問 可訪問 可訪問
default 可訪問 可訪問
private 可訪問

備注:??沒有填寫的內(nèi)容為不可訪問。
問題:被protected標(biāo)注的外部包的子類是否可以訪問淑蔚?
答:可以訪問的带迟,類優(yōu)先與包蝇摸,而被protected標(biāo)注的變量,在子類中是可以訪問的。

2.重寫和重載的對比

  • 什么是重寫?

重寫父類與子類之間的多態(tài)性,是子類對父類的方法重新定義吵瞻,可以實現(xiàn)父類的方法葛菇,也可以不實現(xiàn)父類的方法。
即,方法名卿泽、參數(shù)與返回值完全相同覆致,且子類方法的訪問權(quán)限不可以小于類汰蜘;

  • 什么是重載?

重載是在同一個類中比被,相同的行為的不同表現(xiàn)形式色难。
即,方法名相同尺迂,參數(shù)的個數(shù)或類型不同笤妙,返回值可以相同,也可以不同噪裕。

  • 概述

重寫與重載是java多態(tài)性的具體表現(xiàn)形式.
??使用的原則是:相同的行為蹲盘,表現(xiàn)形式不同時使用

參考鏈接

3.普通類膳音、抽象類和接口的區(qū)別

  • 普通類:
    是具有一系列屬性和行為的類召衔,它可以被實例化成一個對象。

  • 抽象類:
    是普通類的抽象形式严蓖,它僅僅代表一個分類或抽象概念薄嫡,它的實例化沒有任何意義,因此不希望它被實例化颗胡。即毫深,抽象類并不是一個完整的對象。
    特征:
    1.抽象類使用abstract class對類名進(jìn)行標(biāo)記毒姨;
    2.抽象類可以有抽象方法哑蔫,也可以沒有抽象方法,其使用 abstract標(biāo)記弧呐;
    3.抽象類不可以被實例化闸迷;
    4.抽象類可以有普通方法,并實現(xiàn)具體行為俘枫。
    5.抽象類的子類腥沽,必須實現(xiàn)父類的抽象方法,或者子類也是抽象類鸠蚪。
    6.抽象類通過extends使用今阳,一個類只能繼承一個抽象類。

  • 接口:
    接口是特殊的抽象方法茅信,在接口中所有的方法都是抽象方法盾舌。
    特征:
    1.接口使用interface對類名進(jìn)行標(biāo)記;
    2.接口中全部都是抽象方法蘸鲸,不可以寫方法的實現(xiàn)妖谴,由子類實現(xiàn)具體的行為;
    3.接口不可以被實例化酌摇;
    4.接口通過implements使用膝舅,一個類可以實現(xiàn)多個接口。

  • 接口和抽象類的之間的區(qū)別妙痹。
    1.變量铸史,抽象類可以有實例變量,而接口不能擁有實例變量怯伊,接口中的變量都是靜態(tài)的常量琳轿。
    2.方法,抽象類中可以有非抽象方法耿芹,而接口中只能擁有抽象方法崭篡。
    3.接口可以多繼承,抽象類只能繼承一個吧秕。

  • 接口和抽象類的使用場景
    在考慮使用抽象類還是使用接口時琉闪,應(yīng)該從以下兩點出發(fā)。
    1.父類中不需要實現(xiàn)具體的功能砸彬,使用接口颠毙;
    2.子類需要繼承多個父類斯入,才能實現(xiàn)完整的功能時,使用接口蛀蜜;
    其他情況刻两,一般會使用抽象類。
    參考鏈接

4.類的初始化流程

父類:

public class ClassA {
    //構(gòu)造方法
    ClassA() {
        System.out.println("父類-構(gòu)造方法");
    }

    //非靜態(tài)代碼塊
    {
        System.out.println("父類-非靜態(tài)代碼塊");
    }

    //靜態(tài)代碼塊
    static {
        System.out.println("父類-靜態(tài)代碼塊");
    }

    //靜態(tài)方法
    public static void mothedA() {
        System.out.println("父類-靜態(tài)方法");
    }
}

子類:

 public class ClassB extends ClassA {
    //構(gòu)造方法
    ClassB() {
        System.out.println("子類-構(gòu)造方法");
    }

    //非靜態(tài)代碼塊
    {
        System.out.println("子類-非靜態(tài)代碼塊");
    }

    //靜態(tài)代碼塊
    static {
        System.out.println("子類-靜態(tài)代碼塊");
    }

    //靜態(tài)方法
    public static void mothedB() {
        System.out.println("子類-靜態(tài)方法");
    }

    //靜態(tài)方法
    public static void mothedA() {
        System.out.println("父類-靜態(tài)方法");
    }

}

備注:
1.父類的方法優(yōu)先與子類的方法滴某;
2.同一個類中的非靜態(tài)代碼塊與構(gòu)造方法先后執(zhí)行磅摹,執(zhí)行完成后才會執(zhí)行到子類;
3.若直接調(diào)用靜態(tài)方法霎奢,優(yōu)先于非靜態(tài)代碼塊户誓。

調(diào)用方式 執(zhí)行順序
new ClassA(); 父類-靜態(tài)代碼塊
子類-靜態(tài)代碼塊
父類-非靜態(tài)代碼塊
父類-構(gòu)造方法
new ClassB(); 父類-靜態(tài)代碼塊
子類-靜態(tài)代碼塊
父類-非靜態(tài)代碼塊
父類-構(gòu)造方法
子類-非靜態(tài)代碼塊
子類-構(gòu)造方法
ClassA.mothedA(); 父類-靜態(tài)代碼塊
子類-靜態(tài)代碼塊
父類-靜態(tài)方法
ClassB.mothedA(); 父類-靜態(tài)代碼塊
子類-靜態(tài)代碼塊
父類-靜態(tài)方法
ClassB.mothedB(); 父類-靜態(tài)代碼塊
子類-靜態(tài)代碼塊
子類-靜態(tài)方法

總結(jié):
1.直接調(diào)用靜態(tài)方法,即沒有實例化幕侠,不會運(yùn)行非靜態(tài)代碼塊和構(gòu)造方法帝美;
2.同一個類中的非靜態(tài)代碼塊與構(gòu)造方法先后執(zhí)行,執(zhí)行完成后才會執(zhí)行到子類橙依;
3.相同方法证舟,父類優(yōu)先于子類;


以上是我對java象的簡單理解窗骑。
若有問題女责,歡迎指正、留言创译,歡迎大家一起討論抵知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市软族,隨后出現(xiàn)的幾起案子刷喜,更是在濱河造成了極大的恐慌,老刑警劉巖立砸,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掖疮,死亡現(xiàn)場離奇詭異,居然都是意外死亡颗祝,警方通過查閱死者的電腦和手機(jī)浊闪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螺戳,“玉大人搁宾,你說我怎么就攤上這事【笥祝” “怎么了盖腿?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我翩腐,道長鸟款,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任茂卦,我火速辦了婚禮欠雌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疙筹。我一直安慰自己,他們只是感情好禁炒,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布而咆。 她就那樣靜靜地躺著,像睡著了一般幕袱。 火紅的嫁衣襯著肌膚如雪暴备。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天们豌,我揣著相機(jī)與錄音涯捻,去河邊找鬼。 笑死望迎,一個胖子當(dāng)著我的面吹牛障癌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辩尊,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了紫谷?” 一聲冷哼從身側(cè)響起刊驴,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胸墙,沒想到半個月后我注,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迟隅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年但骨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玻淑。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗽冒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出补履,到底是詐尸還是另有隱情添坊,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布箫锤,位于F島的核電站贬蛙,受9級特大地震影響雨女,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阳准,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一氛堕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧野蝇,春花似錦讼稚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乍狐,卻和暖如春赠摇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浅蚪。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工藕帜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惜傲。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓洽故,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盗誊。 傳聞我的和親對象是個殘疾皇子收津,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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