如何閱讀Java源碼

      網友投稿 967 2022-05-30

      閱讀Java源碼的前提條件:

      1、技術基礎

      在閱讀源碼之前,我們要有一定程度的技術基礎的支持。

      假如你從來都沒有學過Java,也沒有其它編程語言的基礎,上來就啃《Core Java》,那樣是很難有收獲的,尤其是《深入Java虛擬機》這類書,或許別人覺得好,但是未必適合現在的你。

      比如設計模式,許多Java源碼當中都會涉及到。再比如閱讀Spring源碼的時候,勢必要先對IOC,AOP,Java動態代理等知識點有所了解。

      2、強烈的求知欲

      強烈的求知欲是閱讀源碼的核心動力!

      大多數程序員的學習態度分為如下幾個層次:

      完成自己的項目就可以了,遇到不懂的地方就百度一下。

      不僅做好項目,還會去閱讀一些和項目有關的書籍。

      除了閱讀和項目相關的書籍之外,還會閱讀一些IT行業相關的書籍。

      平時會經常逛逛GitHub,找一些開源項目看看。

      閱讀基礎框架、J2EE規范、源碼。

      大多數程序員的層次都是在第一層,到第五層的人就需要有強烈的求知欲了。

      3、足夠的耐心

      通過閱讀源碼我們可以學習大佬的設計思路,技巧。還可以把我們一些零碎的知識點整合起來,從而融會貫通。總之閱讀源碼的好處多多,想必大家也清楚。

      但是真的把那么龐大復雜的代碼放到你的眼前時,肯定會在閱讀的過程中卡住,就如同陷入了一個巨大的迷宮,如果想要在這個巨大的迷宮中找到一條出路,那就需要把整個迷宮的整體結構弄清楚,比如:API結構、框架的設計圖。而且還有理解它的核心思想,確實很不容易。

      剛開始閱讀源碼的時候肯定會很痛苦,所以,沒有足夠的耐心是萬萬不行的。

      如何讀Java源碼:

      團長也是經歷過閱讀源碼種種痛苦的人,算是有一些成功的經驗吧,今天來給大家分享一下。

      如果你已經有了一年左右的Java開發經驗的話,那么你就有閱讀Java源碼的技術基礎了。

      1、建議從JDK源碼開始讀起,這個直接和eclipse集成,不需要任何配置。

      可以從JDK的工具包開始,也就是我們學的《數據結構和算法》Java版,如List接口和ArrayList、LinkedList實現,HashMap和TreeMap等。這些數據結構里也涉及到排序等算法,一舉兩得。

      面試時,考官總喜歡問ArrayList和Vector的區別,你花10分鐘讀讀源碼,估計一輩子都忘不了。

      然后是core包,也就是String、StringBuffer等。 如果你有一定的Java IO基礎,那么不妨讀讀FileReader等類。

      建議大家看看《Java In A Nutshell》,里面有整個Java IO的架構圖。Java IO類庫,如果不理解其各接口和繼承關系,則閱讀始終是一頭霧水。

      Java IO 包,我認為是對繼承和接口運用得最優雅的案例。如果你將來做架構師,你一定會經常和它打交道,如項目中部署和配置相關的核心類開發。

      讀這些源碼時,只需要讀懂一些核心類即可,如和ArrayList類似的二三十個類,對于每一個類,也不一定要每個方法都讀懂。像String有些方法已經到虛擬機層了(native方法),如hashCode方法。

      當然,如果有興趣,可以對照看看JRockit的源碼,同一套API,兩種實現,很有意思的。

      如果你再想鉆的話,不妨看看針對虛擬機的那套代碼,如System ClassLoader的原理,它不在JDK包里,JDK是基于它的。JDK的源碼Zip包只有10來M,它像是有50來M,Sun公司有下載的,不過很隱秘。我曾經為自己找到、讀過它很興奮了一陣。

      2、Java Web項目源碼閱讀

      步驟:表結構 → web.xml → mvc → db → spring ioc → log→ 代碼

      ① 先了解項目數據庫的表結構,這個方面是最容易忘記的,有時候我們只顧著看每一個方法是怎么進行的,卻沒有去了解數據庫之間的主外鍵關聯。其實如果先了解數據庫表結構,再去看一個方法的實現會更加容易。

      如何閱讀Java源碼?

      ② 然后需要過一遍web.xml,知道項目中用到了什么-,-,過濾器,擁有哪些配置文件。如果是-,一般負責過濾請求,進行AOP等;如果是-,可能是定時任務,初始化任務;配置文件有如 使用了spring后的讀取mvc相關,db相關,service相關,aop相關的文件。

      ③ 查看-,-代碼,知道攔截了什么請求,這個類完成了怎樣的工作。有的人就是因為缺少了這一步,自己寫了一個action,配置文件也沒有寫錯,但是卻怎么調試也無法進入這個action,直到別人告訴他,請求被攔截了。

      ④ 接下來,看配置文件,首先一定是mvc相關的,如springmvc中,要請求哪些請求是靜態資源,使用了哪些view策略,controller注解放在哪個包下等。然后是db相關配置文件,看使用了什么數據庫,使用了什么orm框架,是否開啟了二級緩存,使用哪種產品作為二級緩存,事務管理的處理,需要掃描的實體類放在什么位置。最后是spring核心的ioc功能相關的配置文件,知道接口與具體類的注入大致是怎樣的。當然還有一些如apectj等的配置文件,也是在這個步驟中完成。

      ⑤ log相關文件,日志的各個級別是如何處理的,在哪些地方使用了log記錄日志。

      ⑥ 從上面幾點后知道了整個開源項目的整體框架,閱讀每個方法就不再那么難了。

      ⑦ 當然如果有項目配套的開發文檔也是要閱讀的。

      3、Java框架源碼閱讀

      當然了,就是Spring、MyBatis這類框架。

      在讀Spring源碼前,一定要先看看《J2EE Design and Development》這本書,它是Spring的設計思路。注意,不是中文版,中文版完全被糟蹋了。

      想要閱讀MyBatis的源碼就要先了解它的一些概念,否則云里來霧里去的什么也不懂。有很多人會選擇去買一些書籍來幫助閱讀,當然這是可取的。那么如果不想的話,就可以去官網查看它的介紹(MyBatis網站:http://www.mybatis.org/mybatis-3/zh/getting-started.html),團長也是按照官網上面的介紹來進行源碼閱讀的。團長認為MyBatis的亮點就是管理SQL語句。

      總結

      沒有人一開始就可以看得懂那些源碼,我們都是從0開始的,而且沒有什么捷徑可尋,無非就是看我們誰愿意花時間去研究,誰的求知欲更強烈,誰更有耐心。閱讀源碼的過程中我們的能力肯定會提升,可以從中學到很多東西。在我們做項目的時候就會體現出來了,的確會比以前順手很多。

      本文轉載于公號:java 團長

      -更多文章-

      Java finally語句到底是在return之前還是之后執行?

      從 Spring Cloud 看一個微服務框架的「五臟六腑」

      Java基礎經典面試題匯總

      HTTP簡介、請求方法與響應狀態碼

      -關注我-

      https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247485361&idx=1&sn=c8a28de2468835eb85a28cb02f6e3eb3&chksm=9bed26c3ac9aafd50a7f406b3dd97de0358c4628d657ecf5f308caf1db309576780db94a2102&scene=21#wechat_redirect

      Java JDK

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【ModelArts入門指南】手把手教你在ModelArts進行圖像標注
      下一篇:openharmony移植案例與原理 - startup子系統之syspara_lite系統屬性部件(1)
      相關文章
      亚洲国产aⅴ成人精品无吗| 亚洲高清无在码在线无弹窗| 亚洲一区二区三区无码国产| 亚洲专区先锋影音| 亚洲国产精品久久久久网站| 亚洲精品无码不卡在线播放HE | 亚洲乱码在线视频| 亚洲成a人片在线观看中文!!!| 亚洲一级二级三级不卡| 久久亚洲私人国产精品| 亚洲综合久久综合激情久久| 久久亚洲AV成人出白浆无码国产| 亚洲AV日韩AV天堂一区二区三区 | 亚洲中文字幕乱码熟女在线| 中文字幕亚洲综合小综合在线| 亚洲最大免费视频网| 亚洲免费视频播放| 国产婷婷综合丁香亚洲欧洲| 伊人久久亚洲综合影院首页| 亚洲一卡2卡3卡4卡5卡6卡 | 亚洲精品人成网线在线播放va| 亚洲一久久久久久久久| 亚洲丰满熟女一区二区哦| 亚洲av日韩综合一区二区三区| 亚洲av无码专区在线观看下载 | 亚洲国产精品成人久久蜜臀| 亚洲精品无码久久久| 亚洲精品无码成人片久久| 亚洲永久永久永久永久永久精品| 亚洲美女一区二区三区| 亚洲校园春色另类激情| 亚洲hairy多毛pics大全| 无码国产亚洲日韩国精品视频一区二区三区 | 亚洲精品无码专区| 国产精品亚洲专一区二区三区| 中文亚洲成a人片在线观看| 久久亚洲AV午夜福利精品一区| 亚洲黄色在线观看| 亚洲日本VA午夜在线影院| 亚洲av无码乱码在线观看野外 | 亚洲一区二区三区乱码在线欧洲|