一點一點看JDK源碼(〇)html
liuyuhang原創,未經容許進制轉載java
寫在前面:c++
幾乎全部的大神都會強調看源碼,也強調源碼的重要性;算法
可是如何看源碼,源碼看什麼?看了什麼用?看了怎麼用?設計模式
困擾不少人,尤爲是初學者。安全
本系列的目的在於看源碼,並不是學習和總結源碼,先可以粗略的瀏覽大量的原碼架構
並保證知曉有這麼個東西,有個基本概念,再對其中的設計原理,優化方案進行學習jvm
本文簡單的回答如下幾個問題:工具
1.爲何要看源碼?post
2.何時或什麼條件下看源碼?
3.看源碼看什麼?
4.看源碼有什麼用?
5.源碼看完了怎麼用?
接下來以我的看法依次回答以上問題:
1.爲何要看源碼?
究這個問題,不少人都認爲軟件會用便可,寫代碼也是一種軟件應用,這個是本質!
咱們都站在巨人的肩膀上,過去是,如今是,未來也是,這個巨人,是歷史!
在拿到每個產品並使用的時候,咱們須要仔細閱讀產品說明書:(從不看說明書的人左轉)
①瞭解產品的使用功能
②瞭解產品的安全性能
③瞭解產品的毒性和反作用
④瞭解產品的維護週期和生命週期
⑤瞭解產品的廠商與聲明
對於不正確使用產品至死致殘又狀告商家的,就好像被人砍了要找賣刀的算帳同樣,
只要超越了通常產品的正常使用方式,出現的問題沒人會代你負責的。(扯遠了)
源碼就是編碼的說明書,由於咱們在使用這個源碼。
咱們須要閱讀源碼,從說明書的角度去正確使用這些工具。
2.何時或什麼條件下看源碼?
本人只有java開發經驗,因此只能以java舉例進行說明了。
以上六條只要知足三條以上,已是應該適當看看源碼的時候了。
3.看源碼看什麼?
咱們說萬物究其本源,要透過現象看本質,實際上這兩句話並非徹底正確的。
萬物的本源應該是微觀粒子領域吧,事物的本質都是宇宙基本定律,也許還能更細究。
假設咱們要看java的原碼,那麼又要考慮java是運行在jvm上的,應該看jvm原碼。
同時jvm又是c++寫的,咱們應該看c++原碼。
同時c++運行在計算機底層是彙編,咱們應該看彙編原碼。
這哪裏有完。
因此,看java原碼,先看使用的工具集,即jdk就足夠了。
一項一項向上系統的看纔是正確的,至於其餘的也並不是不進行接觸,可能不是那麼系統而已。
而jdk看什麼?
打開API,好像隨便點一個類,都會有一個繼承(extends)的類,同時又實現(implements)不少接口
難道一個一個向上看,看到最頂層,而後從頂層開始向下學習麼?
筆者也想過用這種方式,剛看了幾分鐘就以爲不對,緣由以下:
因此,看java,要從一個經常使用的工具開始看,
這個工具必定是一個具體的實現類,而並不是抽象類,並不是是接口。
從一個點開始,向上開始展開。同時這個類最好不是jvm底層有運算符相關的
(如String類的設計不建議最開始就看)
4.看源碼有什麼用?
這個問題看起來好像和爲何看源碼是一個意思,可是實際上要解釋的是不一樣的內涵。
看源碼,主要是看源碼體現出的幾個問題,他分爲兩個層次:
4.1.源碼的構成模式
構成模式,是指從一個類開始看,瞭解這個類的構成。通常包括:
①類的繼承體系
②類的實現體系
③類的成員變量
④類的構造器
⑤類的方法實現
在看類的構造器和方法實現的時候,會發現有些類的構造器是使用了父類構造器,或
加工了父類的構造器的。同理,類的方法實現,即時具體代碼看不懂,也要知道這個
方法是作什麼的,好比入參,出參,加工邏輯,是不是繼承,是不是父接口實現等。
4.2.源碼的設計模式
看源碼的繼承體系和實現體系的時候,確定會有一種不知所然的感受,
「這個爲啥要繼承?」「這個爲啥要那麼多接口?」
固然,看的數量少,一定會有這種感受。
而源碼中的設計模式,其實是妙趣橫生的,有些變量的命名,也是很走心的,
有些沒有寫在doc中的雙斜槓註釋,纔是真的應該關心,在API中看不到的內容。
5.源碼看完了怎麼用?
看源碼看jdk的原碼(本身說的,本身打臉),實際上對jdk進行改動的人少之又少,雖然開源。
咱們看源碼,看完了,明白了其中的良苦用心,難道咱們在使用這些工具的時候能玩出花來麼?
也許根本作不到,美麗花朵夏天一場雨也許就掉光了。
咱們會不用jdk設計好的基類,而是在其基礎上進行擴展麼?好像也不會。
實際上jdk的設計模式,是咱們開發模式的抽象集成。如:
如何把控類的邊界?
如何把控類的擴展性?
如何提升類的可維護性?
如何提升類的健壯性?
如何進行代碼重構?
難道架構師真的是個滿嘴跑火車號令羣猿的人而已麼?
難道接口工程師只是命名寫註釋麼?
難道開發工程師拿到固定需求是隨便寫類的麼?
若是一個大型的研發體系中,沒有人懂源碼,沒有人懂架構,哦~呵呵~
這必將影響這個研發項目產出產品的生命週期了。
怎麼用,取決於我的,看多深,也取決於我的,也許看到了一個新奇的代碼非常喜歡呢。
理論就說這些,以後將一個一個拆,對於源碼的體系,進行慢慢的剖析。
我也不知道會更多久,會不會更下去,堅持一點是一點吧。
6.已更列表:
以上!