• Java学习源代码学习 2015-08-24 15:27:18
    说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。...
    转自:http://zwchen.iteye.com/blog/1154193


    源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。 


    说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。 
    虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它。我文中会专门谈到这个,暂时不展开。 


    强烈的求知欲,我认为是阅读源码的最核心驱动力。我见到绝大多数程序员,对学习的态度,基本上就是这几个层次(很偏激哦): 
    1、只关注项目本身,不懂就baidu一下。 
    2、除了做好项目,还会阅读和项目有关的技术书籍,看wikipedia。 
    3、除了阅读和项目相关的书外,还会阅读IT行业的书,比如学Java时,还会去了解函数语言,如LISP。 
    4、找一些开源项目看看,大量试用第三方框架,还会写写demo。 
    5、阅读基础框架、J2EE规范、Debug服务器内核。 


    大多数程序都是第1种,到第5种不光需要浓厚的兴趣,还需要勇气:我能读懂吗?其实,你能够读懂的。 


    耐心,真的很重要。因为你极少看到阅读源码的指导性文章或书籍,也没有人要求或建议你读。你读的过程中经常会卡住,而一卡主可能就陷进了迷宫。这时,你需要做的,可能是暂时中断一下,再从外围看看它:如API结构、框架的设计图。 


    我就说说如何读Java源码,以及我曾经的阅读感悟。 


    Java源码初接触 
    如果你进行过一年左右的开发,喜欢用eclipse的debug功能。好了,你现在就有阅读源码的技术基础。 
    我建议从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公司有下载的,不过很隐秘。我曾经为自己找到、读过它很兴奋了一阵。 


    Java Web开发源码 
    在阅读Tomcat等源码前,一定要有一定的积累。我的切实体会,也可以说是比较好的阶梯是: 
    1、写过一些Servlet和JSP代码。注意,不是用什么Struts,它是很难接触到Servlet精髓的。用好Struts只是皮毛。
    2、看过《Servlet和JSP核心编程》 
    3、看过Sun公司的Servlet规范 
    4、看过http协议的rfc,debug过http的数据包 
    如果有以上基础,我也不建议你开始读Tomcat源码。我建议你在阅读Tomcat源码前,读过Struts源码,Struts源码比WebWork要简单得多。这个框架是可以100%读懂的,至少WebWork我没有100%读懂。我曾经因为读懂了Struts源码,自己写过一个Web框架。 


    当然,在读Struts框架前,最好看过它的MailReader等demo,非常非常不错的。 
    如果你做过一些Struts项目,那么读它时就更得心应手了。 
    在读Struts前,建议看看mvnforum的源码,它部分实现了Struts的功能,虽然这个BBS做得不敢恭维。 


    如果你读过Struts,再开始考虑Tomcat源码阅读吧。 
    不过,我还是不建议直接读它,先读读onJava网站上的系列文章《How Tomcat Works》吧,它才是Tomcat的最最简易版。它告诉你HttpServletRequest如何在容器内部实现的,Tomcat如何通过Socket来接受外面的请求,你的Servlet代码如何被Tomcat容器调用的(回调)。 
    学习JSP,一定要研读容器将JSP编译后的Servlet源码。 
    为什么我总是称呼Tomcat为容器,而不是服务器?这个疑问留给大家吧。 


    如果你一定要读Tomcat,那么就读Jetty吧。至少它是嵌入式,可以直接在eclispe里面设置断点debug。虽然Tomcat也有嵌入式版本。 


    Java数据库源码阅读 
    我建议,先读读Sun的JDBC规范。 
    我想你一定写过JDBC的代码,那么这时候可以开始阅读源码了。 
    如果了解JDBC规范(接口),那么它的实现,JDBC Driver就一定要开始了解,我的建议是,读读mysql的jdbc驱动,因为它开源、设计优雅。在读mysql的JDBC驱动源码时,建议看看mysql的内幕,官方正好有本书,《Mysql Internals》,我五年前读过一部分。比如你可以知道mysql的JDBC驱动,如何通过socket数据包(connect、query),给这个C++开发的mysql服务器交互的。 


    通过上面的阅读,你可以知道,你的业务代码、JDBC规范、JDBC驱动、以及数据库,它们是如何一起协作的。 
    如果你了解这些内幕,那么你再学习Hibernate、iBatis等持久化框架时,就会得心应手的。 


    读过JDBC驱动,那么下一步一定要读读数据库了。而正好有一个强大的数据库是用Java开发的,Hsqldb。它是嵌入式数据库,比如用在桌面客户端软件里,如Mail Client。 
    我四年前为此写过一篇小文,就不介绍了。 


    Java通讯及客户端软件 
    我强烈推荐即时通讯软件wildfire和Spark。你可以把wildfire理解成MSN服务器,Spark理解成MSN客户端。它们是通过XMPP协议通讯的。 
    我曾经在一个项目中,定制过Spark,当然也包括服务端的一些改动。所以它们的源码我都读过。 
    我之所以推荐它们。是因为: 
    1、XMPP够轻量级,好理解 
    2、学习Socket通讯实现,特别是C/S架构设计 
    3、模块化设计。它们都是基于module的,你既可以了解模块化架构,还可以了解模块化的技术支撑:Java虚拟机的ClassLoader的应用场景。 
    4、Event Driven架构。虽然GUI都是Event驱动的,但Spark的设计尤其优雅 


    这么说吧,读它们的源码,你会为做一名程序员而自豪,因为无论是他们的架构设计还是代码,都太漂亮了。 


    Java企业级应用 
    当然了,就是Hibernate、Spring这类框架。 
    在读Spring源码前,一定要先看看Rod Johnson写的那边《J2EE Design and Development》,它是Spring的设计思路。注意,不是中文版,中文版完全被糟蹋了。 
    在读Hibernate源码前,一定要读读Gavin King写的那本《Hibernate in Action》,同时,应该再读读Martin Fowler写的《企业应用架构模式》,它专门谈到持久化框架的设计思路。当你觉得这两本书读透了,再去看它们源码吧。 
    而且,在读源码前,你会发现它们用到很多第三方Jar包,二三十个,你最好把那些Jar包先一个个搞明白。 


    说到企业应用,一定会涉及到工作流。我当年读过jBPM的源码,网上有介绍jBPM内核的文章(银狐)。我感觉它的内核也就两千行,不要害怕。我曾经阅读jBPM源码的博客。 
    当然了,读工作流源码,前提是一定要对其理论模型有深入的了解,以及写过一些demo、或做过一些项目。 


    我上面介绍的这些,是我自己读过的,也适合一般人阅读。 
    我也读过一些非Java源码,感觉不错,也推荐给大家: 
    dojo源码 它的架构设计得很优雅,仿Java的import和extends。但实际应用起来一塌糊涂。我们当年基于这个开发了自己的框架,不过我不是主力。 


    Flex源码 Flex 08年底刚刚开源后,我就用它做过一个中型项目,应该说是国内的技术先行者。当时市面没有有深度的书,也没有开源项目。我纯粹是看Flex的Help文档和源码,把项目搞定的。两三年过去了,现在觉得系统设计得蛮优雅的。
    展开全文
  • Java学习代码合集 2019-07-17 10:49:41
    其实我学习java最根本的原因是:我是一个挺关注外在的人,虽然是个程序员,所以我很喜欢写出那些带有漂亮的界面的程序,因为C总是控制台,我不是很喜欢,在这份java代码合集中,我会记录自己学习Java界面化编程的...
  • 源代码Java下载通用数据挖掘系统 V3.0使用说明(1)目录清单:src下是源代码。其中,hjk是作者开发的工具类包,本程序有多项依赖于它。Dms30是本程序主代码包,DmsClient.java是客户端主程序,DmsServer.java是...
  • 50个java游戏源代码 2020-07-08 16:07:50
    50个java游戏源代码。50个java游戏源代码,包括斗地主,黄金矿工,等50个经典小游戏的源码,非常值得学习
  • 一、题目:综合性实验 Java源代码分析程序 二、类型:综合型、探索型 三、目的:初步掌握运用面向对象方法编写应用程序,掌握类、对象、封装等;了解并应用Java语言的字符串处理、文本文件的读写 ...
  • JAVA源码学习要点汇总 2018-05-13 16:07:49
    JVM的原理3.java变量4.java数据类型5.java运算符6.java判断语句if-else7.java循环语句switch-case\for\while\do-while和continue\break二、面向对象1.构造函数2.关键词static、super、final3.继承4.方法重载和覆盖5...
  • Eclipse查看java源代码 2020-02-17 19:19:11
    第一步:点击Window下的... ... 第三步:打开以rt.jar结尾的jar包,双击Source attachment ...如果是第一次设置那么这里的Source attachment:none默认,我这里是之前已经修改过的 ...第四步:选中External loca...
  • 学生管理系统 Java源代码 2019-06-21 11:40:01
    测试问答哈哈哈哈哈哈
  • java版QQ项目 源代码共享 2013-12-15 21:22:20
    最近总有人联系我要java 版QQ源代码,当然你想学习,我不会拒绝给你,请拿到源代码的朋友,认真阅读一下,同时我想对要源代码的朋友提出几点要求,希望大家认真看一下: 1、我写的这个QQ虽然不是很完善,但大家...
  • 非常值得学习java 绘图板源代码下载地址:https://download.csdn.net/download/afgasdg/2371150   用到的各种图片 请将图片放在icon文件夹下 java 绘图板源代码下载地址:...
  • java中导入源代码 2014-07-05 18:08:38
    今天在学习java时,想查看下源代码,按住ctrl之后没有源代码
  • 2、了解代码大致结构,再根据模块详细去看,效果会好一些。 3、每天敲上1千行。。就可以了。。。习惯了就好了。。。慢慢来。。。   比如说 你看书看累了 写个小程序放松下(一般别人是玩游戏放松)- -这样你就...
  • 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,...反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转
  • 一个java图书管理系统的源码,数据库采用mysql,由于mysql也有Linux版本,所以在windows和Linux下都适用。代码已优化,精简高效,适合初、中级学员学习参考,其功能图如下: 菜单栏 ——文件 ————退出 ——管理 ...
  • java中String类源代码学习 2016-08-16 00:10:55
    源代码阅读工具连接SourceInsight:http://www.sourceinsight.com/。 java中的String类可谓是重中之重,java保证其不变性,其有很多方法例如substring() , concat() , replace() , join(), toLowerCase() , trim() ...
  • 不会看JDK源代码,相当于没学过Java。 网上不容易找到一篇帮助我解决了如何在Eclipse下查看JDK源代码 的文章。   核心提示:在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 window- ...
  • 学习一下java开发!用什么编译器,如何生成并运行程序?从csdn上下载的源代码例程,如何打开并重新生成可执行代码?
  • 在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码。细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,...
  • java开源论坛系统Mango BBS源代码下载 源代码下载地址:http://www.zuidaima.com/share/1712962200603648.htm
  • 那么Java语言中发生了什么,从源代码到机器代码?这就是我们今天要讨论的。 如下图所示,编译器可以分为前端编译器、JIT编译器和AOT编译器。我们一个接一个地谈吧。 前端编译器:源代码到字节码 正如我们前面所...
1 2 3 4 5 ... 20
收藏数 235,548
精华内容 94,219