如何读Java源码

阅读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开发源码50个合集: Ajax框架 ZK.rar Java图书馆管理系统源程序.rar Java图片倒影效果实例源码.rar Java图片翻折,将图像压扁.rar Java坦克大战网络对战版源代码.rar Java声音播放程序源代码.rar JAVA实现CLDC与MIDP底层编程的代码.rar Java实现HTTP连接与浏览,Java源码下载.rar Java实现的FTP连接与数据浏览程序.rar Java实现的放大镜效果附有源文件.rar Java实现的点对点短消息发送协议(smpp)开发包源码.rar Java实现的视频播放程序源码.rar Java实现移动的遮照效果.rar JAVA实现超级玛丽.zip Java实现跟踪鼠标运行坐标的源码.rar Java手机与计算机互发彩信源码.rar Java手机游戏大富翁源代码+注释.rar Java手机短信项目源码.rar Java扫雷源码.rar Java生成自定义控件源代码.rar Java调色板面板源代码.rar Java跳棋(基于SWT).rar Java通讯录手机版源码.rar Java鼠标拖拽功能.rar 乐趣大型购物系统.rar 可实现网上对战和人机对战.rar 基于BS结构的Java可视化工作流定制软件.rar 基于J2ME的Java游戏梦幻炸弹人源程序.rar 基于JAVA的ICQ系统.rar 基于Java的mp3播放器源代码.rar 基于Java的小型人事管理系统,带数据库.rar 基于JAVA的日程提醒簿.rar 基于Java的邮件服务器源程序.rar 基于MVC的Java资源管理器 v2.0.rar 基于smpp协议的Java点对点短信发送源码包.rar 季风进销存管理系统(JSP版).rar 客户管理系统 Alfresco Content Management.rar 家庭多媒体播放器.rar 局域网广播系统java源码.rar 开源Winzip压缩工具Java源码.rar 很不错的Java计算器.rar 很强的Java加密解密算法源码.rar 泡泡堂战车游戏JAVA源码.rar 简单模拟的J2ME潜艇大战源代码.rar 简单的注册与登录功能.rar 类似QQ的聊天软件JAVA源码(附设计文档).rar 进程通信.rar 连接postsql数据库java代码.rar 附加数据库.rar 雷电游戏JAVA版源程序.rar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值