阅读Java源码的前提条件:

1、技术基础

在阅读源码之前,我们要有一定程度的技术基础的支持。

假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃《Core Java》,那样是很难有收获的,尤其是《深入Java虚拟机》这类书,或许别人觉得好,但是未必适合现在的你。

比如设计模式,许多Java源码当中都会涉及到。再比如阅读Spring源码的时候,势必要先对IOC,AOP,Java动态代理等知识点有所了解。

2、强烈的求知欲

强烈的求知欲是阅读源码的核心动力!

大多数程序员的学习态度分为如下几个层次:

  1. 完成自己的项目就可以了,遇到不懂的地方就百度一下。
  2. 不仅做好项目,还会去阅读一些和项目有关的书籍。
  3. 除了阅读和项目相关的书籍之外,还会阅读一些IT行业相关的书籍。
  4. 平时会经常逛逛GitHub,找一些开源项目看看。
  5. 阅读基础框架、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→ 代码

① 先了解项目数据库的表结构,这个方面是最容易忘记的,有时候我们只顾着看每一个方法是怎么进行的,却没有去了解数据库之间的主外键关联。其实如果先了解数据库表结构,再去看一个方法的实现会更加容易。

② 然后需要过一遍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源码?已收藏以备后用相关推荐

  1. 你会阅读Java源码吗

    阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃<Core Java>,那样 ...

  2. 如何快速阅读java源码_如何速读?--如何快速阅读

    下面这些资料是我刚才在整理电脑硬盘的时候发现的,是以前自己刚刚开始关注自己阅读速度和质量的时候收集的资料.因为但是上面不方便,所以全是整理成了TXT文件保存下来,现在发到Blog里面,做个记录.速读要 ...

  3. 如何快速阅读java源码_如何进行快速阅读代码

    每个程序员所写的代码都有自己的风格,而我们在参考别人的代码的时候,如何能更快速更好地读懂和自己编程风格的代码呢?下面小编为你整理如何快速阅读代码,希望能帮到你. 快速阅读代码方法 1.阅读源代码的说明 ...

  4. 如何快速阅读java源码_程序员如何快速阅读源代码

    科学研究已经证明:人类进行传统阅读时,主要使用左脑的功能;而在采用速读方式阅读时,则充分调动了是左右脑的功能作用,各自发挥左右脑的优势共同进行文字信息的形象辨识.意义记忆和理解,所以速读又被称之为全脑 ...

  5. 高效阅读嵌入式源码系列一:静态分析神器understand软件基本操作

    系列文章目录 高效阅读嵌入式源码系列一:静态分析神器understand软件基本操作 高效阅读嵌入式源码系列二:understand阅读linux.uboot等源码 高效阅读嵌入式源码系列三:unde ...

  6. 面试官系统精讲Java源码及大厂真题 - 48 一起看过的 Java 源码和面试真题

    48 一起看过的 Java 源码和面试真题 不为了源码而读源码,只为了更好的实践 持续几个月,我们的专栏终于结束了,这篇总结篇,我们又想回到当初写这篇专栏的初心:我们不为读源码而读源码,只是为了更好的 ...

  7. 面试官系统精讲Java源码及大厂真题 - 01 开篇词:为什么学习本专栏

    01 开篇词:为什么学习本专栏 更新时间:2019-10-30 10:08:31 才能一旦让懒惰支配,它就一无可为. --克雷洛夫 不为了源码而读源码,只为了更好的实践 你好,我是文贺,Java 技术 ...

  8. idea调试源代码c语言,IDEA阅读spring源码并调试

    目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...

  9. java源码pdf_面试官系统精讲Java源码及大厂真题 PDF 下载

    主要内容: 第 1 章 基础 01 开篇词:为什么学习本专栏 不为了源码而读源码,只为了更好的实践 你好,我是文贺,Java 技术专家,DDD 和业务中台的资深实践者,一周面试 2-3 次的面试官. ...

  10. Java源码阅读之String(4)

    Java源码阅读之String(4) 这一篇博客主要阅读String类的查找和替换相关的方法. /**查询当前对象的哈希码,如果当前对象没有计算过哈希码*则计算当前对象的哈希码并赋值给当前对象的has ...

最新文章

  1. linux六种进程状态,Linux操作系统中进程的七种状态
  2. 从各方面数据来看《猎场》为什么收官后热度依旧
  3. 【Matlab 控制】构建系统,绘制零极点
  4. Mpvue微信小程序时间消耗进度条组件的实现
  5. java中regex_Java 9中的新Regex功能
  6. opporeno3pro可以刷鸿蒙系统吗,华为P40放大招!鸿蒙系统+120Hz+徕卡五摄,明年2月发布!...
  7. SpringMvc JavaMailSenderImpl 邮件发送时到时前端无法接受Json数据问题解决
  8. 逻辑运算符 用法解释
  9. 《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——3.3 DRBD的管理与维护...
  10. 二叉树的高度_完全二叉树的子节点数
  11. mongoDB mongochef-x64 搭建
  12. Java基础SE.03.Java面向对象
  13. 城市地铁类毕业论文文献包含哪些?
  14. android - DeviceOwner: Trying to set device owner but device is already provisioned
  15. Codeforces 1293 E. Xenon‘s Attack on the Gangs —— 树上记忆化搜索,单点加改成区间加,有丶东西
  16. 腾讯云认证,腾讯云架构高级工程师,腾讯云高级运维工程师 考试通过
  17. tdms用matlab打开,关于用Matlab 打开tdms文件的问题
  18. 二维数组求周长的问题
  19. 集美大学部计算机学院,集美大学专业
  20. python编程难在哪里?

热门文章

  1. UnityHub破解Unity破解
  2. 免费的微信小游戏开发视频以及小程序源码
  3. PX4位置估计源码分析
  4. 宏想固态无法格式化,SM2258XT主控开卡成功经验,SM2259XT可参考
  5. 软件测试 查看网页打开时间,网页响应时间101(一)
  6. Postman测试post接口
  7. 让手机成为电脑的摄像头,Droidcam(linux) 的安装及使用
  8. 聚类分析软件测试,文本聚类分析效果评价笔记 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  9. ReportMachine 3.0技巧
  10. Chrome浏览器的翻译插件开发