2020年4月15日這一天
劉小愛同學(xué)開始了Java的自學(xué)之旅
從此走向了一條不歸路
都說萬事開頭難,Java的開頭還是蠻簡單的。
不僅簡單,還挺有趣的:
什么情況下1+1=10?
為什么64G的手機(jī),實(shí)際存儲(chǔ)空間不到64G?
為什么100M的寬帶就是達(dá)不到100M/秒?
如何讓電腦自動(dòng)開關(guān)機(jī)?
蘋果與微軟的沖突以及Windows的由來軼事?
帶著這些問題,很開心地學(xué)完了前幾天的知識(shí)點(diǎn)。
接著就是Java的介紹以及第一個(gè)程序的編寫。
從此之后,我也是寫過程序的人了。
大概HelloWorld是每一個(gè)程序員接觸到的第一個(gè)程序吧。
仿佛感覺程序一下子有了生命,在和世界問好:
無論是常量、變量以及數(shù)據(jù)類型的介紹;還是運(yùn)算符和流程控制語句的接觸。
一個(gè)多星期的學(xué)習(xí)下來,感覺還是蠻簡單的。說白了不就是一些數(shù)學(xué)知識(shí)么?
難怪說學(xué)編程需要具備一定的數(shù)學(xué)基礎(chǔ)呢,英語反而還是次要的了,畢竟有各種翻譯軟件。
正當(dāng)我對(duì)后面的學(xué)習(xí)充滿憧憬時(shí),數(shù)組出現(xiàn)了…
咦,怎么和數(shù)學(xué)里的數(shù)組不一樣?
咦,怎么別的變量控制臺(tái)輸出都是值,你輸出的是一串看不懂的字符?
哦,原來這個(gè)是引用的地址值,數(shù)組是引用數(shù)據(jù)類型。
行吧,你說是地址就地址吧,我也不太懂,我也不敢問。
好在問題不算大,大不了死記硬背背下來。
然而緊接著的面向?qū)ο髮⑽覈樍艘惶?/span>
什么?面向?qū)ο缶幊蹋坎粫?huì)吧……沒有對(duì)象連Java都不能學(xué)么?
都說程序員群體里鄙視鏈很嚴(yán)重可問題是我這不是才剛開始學(xué)么……
經(jīng)過一天的學(xué)習(xí)才發(fā)現(xiàn):哦,原來此對(duì)象非彼對(duì)象。
在Java里面一切萬物都是類,而對(duì)象就是類的實(shí)例化。
也就是說我豈不是可以new無數(shù)個(gè)對(duì)象?
以后520情人節(jié)什么終于不用擔(dān)心沒對(duì)象了……
對(duì)象輸出的時(shí)候,我擦,又是一串字符,和數(shù)組很相似。
看來這次不能再敷衍了,得將引用數(shù)據(jù)類型弄明白。
引用數(shù)據(jù)類型,這個(gè)引用,到底什么叫引用啊?
哦,原來引用是這么個(gè)意思,就好比是一個(gè)快捷方式。
地址本身并沒有內(nèi)容,有內(nèi)容的是地址指向的對(duì)象。
哎喲,原來如此,嘛,我也不知道這樣說明對(duì)不對(duì),反正這么一想后,確實(shí)好理解些了。
學(xué)到這兒雖然磕磕碰碰,好在有驚無險(xiǎn),問題不大。
再加上學(xué)了幾個(gè)很好玩的API:
如何獲取一個(gè)隨機(jī)數(shù)?
如何在控制臺(tái)上輸入數(shù)字并輸出?
如何求絕對(duì)值?如何四舍五入?如何向上取整?如何向下取整?
字符串String類,這個(gè)類在Java里大概就和現(xiàn)實(shí)中吃飯一樣常見…
Java里最常見的容器?
以上種種的接觸,也算是沒有磨滅我學(xué)習(xí)Java的激情,
面向?qū)ο笕筇匦裕悍庋b、繼承以及多態(tài)。
我很長一段時(shí)間對(duì)封裝的概念一直都是很模糊的,說不出它具體有什么作用,不就一個(gè)private關(guān)鍵字么?
使類更加地安全,那是個(gè)什么樣的安全法呢?懵懵懂懂…
正當(dāng)我還在糾結(jié)封裝到底有何用時(shí),繼承來了。
父類可以有很多子類,但子類只能有一個(gè)父類。
就好比:父親可以有很多兒子,但兒子只能有一個(gè)親爹。
有趣有趣,而接下來接口的學(xué)習(xí)讓其更加地有趣了起來:
兒子只能有一個(gè)親爹,但是可以有多個(gè)干爹。所以一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
接口中的抽象方法就好比一個(gè)作文題目:
寫作文的過程不就相當(dāng)于實(shí)現(xiàn)接口重寫方法的過程么?
誰說學(xué)編程挺枯燥乏味的?這不是挺有趣的嘛?
接下來就是多態(tài),什么叫多態(tài)?
一種行為多種形態(tài)。同樣是吃,貓吃魚狗吃肉奧特曼吃小怪獸,這還不好理解,簡單呀。
很長一段時(shí)間我也是這么覺得的,直到我學(xué)了函數(shù)式編程,才發(fā)現(xiàn)自己想的太簡單了。
不管我情不情愿,我還是迎來了學(xué)Java的一道大坎:匿名內(nèi)部類。
本來類里面再放一個(gè)類就感覺有點(diǎn)懵,現(xiàn)在還是匿名內(nèi)部類,沒有名字看得更加的一臉懵逼了。
內(nèi)部類,累不累?
嘛,沒辦法,還是得繼續(xù)學(xué),畢竟是自己的選擇,爬都要給我爬下去。
好在接下來兩天學(xué)習(xí)還算簡單,算是找回了一點(diǎn)信心。
Java里的亞當(dāng)與夏娃?
如何獲取計(jì)算機(jī)的系統(tǒng)時(shí)間?
算一算自己活了多少天,多少小時(shí)?
接著就是集合了,這都還好說。畢竟前面學(xué)過ArrayList這個(gè)集合。
但是數(shù)據(jù)結(jié)構(gòu)真的是學(xué)的我一個(gè)頭兩個(gè)大。
堆棧、隊(duì)列、數(shù)組、甚至是鏈表都還好說,這個(gè)樹結(jié)構(gòu)光看著都頭痛,主要是太多了:
什么2-3-4樹、B-樹、B+樹、B*樹、Trie樹(字典樹) ……就連最常見的紅黑樹都沒弄太明白。
行吧,反正這個(gè)對(duì)寫代碼影響不算大,不懂就不懂吧。
再往后就是異常和多線程了:
遇到異常怎么辦?死了都要try,不抓住異常不痛快。
原來我們常說的BUG就是這個(gè)異常?看來寫代碼的過程就是不斷地和異常做斗爭……
多線程,每次看到線程我就會(huì)莫名地想起“平行世界”。
本來我同一時(shí)間只能做一件事,現(xiàn)在多一個(gè)平行世界我就能同時(shí)做兩件事,那我多個(gè)幾十萬個(gè)豈不是無敵?
Java的多線程準(zhǔn)確來說是偽線程,硬件配置才是真線程。
所以理論上Java線程是可以創(chuàng)建很多很多個(gè)的,但是多了程序會(huì)崩,而如何保證程序不崩就需要不停地優(yōu)化了。
IO流,用來傳輸文件的存在,難倒是不算太難,就是流太多太多了有點(diǎn)記不住。
后來我痛定思痛,終于領(lǐng)悟了一招IO流的終極絕學(xué)“萬流歸宗”,才算勉強(qiáng)過關(guān)。
有人說:你現(xiàn)在所欠下的,將來都得換回來。
以前我對(duì)這句話是嗤之以鼻的,但是自從開始學(xué)函數(shù)式編程時(shí),我相信這句話了。
第一次看到lambda表達(dá)式,仿佛跟天書一般的存在,本來匿名內(nèi)部類就是因?yàn)槭÷粤祟惷悴磺宄?/span>
現(xiàn)在lambda表達(dá)式不僅類名沒有,連方法名都沒有了…
也就是說要看懂lambda表示式得對(duì)接口中的抽象方法了如指掌,同時(shí)對(duì)匿名內(nèi)部類也要很熟悉。
等我以為這已經(jīng)是最難懂了的時(shí)候,方法引用又出來了。
現(xiàn)在不僅方法名省了,連方法參數(shù)、方法體都省了。
天啦,這啥都沒有,我怎么知道表示的是啥……
正當(dāng)我以為方法引用是最抽象的時(shí)候,反射又出來了。
你說好好的創(chuàng)建對(duì)象不好么?
好好地調(diào)用方法不好么?
好好地設(shè)置屬性獲取屬性不香么?
反射偏不,它偏要反著來:
它偏要用方法調(diào)用對(duì)象;
它偏要用屬性自己給自己設(shè)置屬性;
沒看過射雕英雄傳么?歐陽鋒就是反著練九陰真經(jīng)所以走火入魔了的?
更可氣的是反射它還就是牛逼,一般應(yīng)用于框架。
更巧的是歐陽鋒雖然走火入魔了也反而更厲害了。
莫非金庸老先生也是程序員?
還是說什么這世間很多事情反著來就會(huì)很牛逼?
動(dòng)態(tài)代理,無疑是JavaSE里最難的存在。也就是這天,我感受到了被動(dòng)態(tài)代理所支配的恐懼……
這……這也太難理解了吧?看了一天根本就是一臉懵逼。
天啦,求求老天爺派個(gè)小仙女下來救救孩子吧。
老天爺聽到后對(duì)我冷冷地一笑:
你以為這就完了?
還有八大經(jīng)典排序算法和23種設(shè)計(jì)模式呢。
我:……
如果有一天你發(fā)現(xiàn)我不再更新了,不用懷疑。
我只是在和歐陽鋒一樣,在練一門絕世神功,待吾神功練成,必將君臨天下!
零基礎(chǔ)自學(xué)Java,從入門到入土……
最后
謝謝你的觀看。
如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。
聯(lián)系客服