如何阅读Java源码?且听阿里P7架构师的分享

阅读源码意义

在我看来,阅读源码的意义在于学习优秀的「套路」。

这里的「套路」所指范围很广,大到架构设计,小到可取的命名风格,还有设计模式、实现某类功能使用到的数据结构和算法等等。所谓高手,其实就是能比大部分人更早更快地掌握套路并熟练运用之人。

埋头在自己的天地里耕芸固然也能逐渐进步和成长,但总会有时候会遇到一些场景,你苦思良久也无法做出良好的设计,总会有一些时候,纠结如何为一个变量命名让你停下飞速敲击的手指。这些令你为难的场景,先贤们也许早就遇到过,并且给出了优雅的解决方案。看优秀的源码的时候,将这样的场景与对应的方案收入囊中,或者仅仅在脑中留下一个印象也好,以便在需要的时候,你的武器库里总能掏出一把称手的家伙来。

一些方法

不应该这样

不应该漫无目的地随手拿起一分源码,试图去通读。这一方面会过目即忘无所收获,另一方面会枯燥得让你迅速从着手到放弃。学习的方式有很多种,阅读源码并不一定是最适合你当前的情况的。

应该这样

  1. 精心挑选要阅读的源码项目。
  2. 这最好是与你的编程语言、你的工作内容、你的兴趣所在相关的,这样才能更切实地感受到阅读源码给你带来的益处,更有动力继续。
  3. 如果你想学习的知识点有官方文档,先看文档再看源码。
  4. 直接从源码着手,搞清楚原理固然是好,但是源码有可能是难啃的,先熟悉官方提供给所有人看的文档,能较为平滑地对这方面的知识先有个大概的了解,然后再结合源码去深入。
  5. 提出具体的问题,然后带着问题到源码中找答案。
  6. 比如在使用 Toast 的过程中,你可能会想到一些问题:Toast.makeText(...).show() 时发生了什么?Toast 能不能在非 UI 线程调用?能不能自定义 Toast 布局?诸如此类。在源码中探寻完你想要的答案,你的目的也就达到了。
  7. 从一些共性层面入手。
  8. 大部分的程序里都会使用到的东西,比如线程模型、UI 组织结构、任务调度方式等等。针对某一个方面去了解,比漫无目的要有效率得多。
  9. 最好能够编译运行起来。
  10. 如果一份代码你只能看不能跑,那可能读到一些地方你只能猜这个地方的数据值和跳转结构是怎么样的,而很有可能你猜的是错的。但如果你能编译运行,那在需要的时候你可以修改,加日志等等来更好地观察和验证你的想法,得到正确的理解。
  11. 做一些笔记。
  12. 一方面是将你的学习成果保留下来,方便随时查阅,毕竟只凭脑子记忆是不靠谱的;另一方面在学习的过程中,也能帮助理解。

总结

没有人一开始就可以看得懂那些源码,我们都是从0开始的,而且没有什么捷径可寻,无非就是看我们谁愿意花时间去研究,谁的求知欲更强烈,谁更有耐心。阅读源码的过程中我们的能力肯定会提升,可以从中学到很多东西。在我们做项目的时候就会体现出来了,的确会比以前顺手很多。

分享一个源码分析专题脑图:

如何阅读Java源码?且听阿里P7架构师的分享

源码分析知识点:

spring源码分析:

  • Spring框架的前世今生及系统概述
  • 用300行代码手写提炼Spring的核心原理
  • Spring源码版本命名及源码下载构建技巧
  • 一步一步手绘SpringIOC容器初始化时序图
  • 用30个类高仿真提炼纯手写Spring框架V2.0
  • Spring事务传播原理及数据库事务操作原理
  • 基于Spring JDBC手写定制自己的ORM框架
  • Spring5新特性简述及BATJ经典面试题分析

MyBatis源码分析:

  • MyBatis应用分析与最佳实践
  • MyBatis体系结构与工作原理
  • MyBatis源码分析
  • 手写MyBatis 1.0
  • 手写MyBatis 2.0

给大家分享源码分析的PDF 欢迎大家领取!

如何阅读Java源码?且听阿里P7架构师的分享

加我QQ:2011352522 【源码】即可获取~pdf+详细视频讲解+社群交流.

发布了131 篇原创文章 · 获赞 743 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/t4i2b10X4c22nF6A/article/details/90409918