导航:首页 > 源码编译 > java源码看不懂

java源码看不懂

发布时间:2024-06-22 03:33:20

1. 学习java的同学都是怎么读源码

刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该不需要改;另外即使我改了源码,怎么样让我的改动生效了?项目中引用的不还是没改的jar包吗。回想起来觉得那时候的想法确实挺??

工作了一年多之后准备跳槽了,开始了一轮的面试,其中有几个面试官就问到了相关的源码问题:ArrayList、HashMap的底层实现,spring、mybatis的相关源码。问源码的面试一般就是回去等消息,然后就没然后了。

那时候开始意识到,源码这东西在之前的工作的中感受不到,但是在面试中好像面的还挺频繁的,从此有意识的开始了jdk部分源码的阅读(主要是集合)。一开始看源码,看的特别糙,知道个大概,知道ArrayList的底层实现是数组,HashMap的底层是散列表(数组+链表);更深入一点的扩容、hash碰撞等等就不知道了。

读spring源码起于工作中遇到了一个问题(springjdbcTemplate事务,各种诡异,包你醍醐灌顶!),排查一段时间最终是解决了,但过程让我非常难受,各种上网查资料、各种尝试,感觉就像大海捞针一样,遥遥无期。我下定决心,我要看一看spring的源码,于是我买了一本《spring源码深度斗带解析》,结合着这本书、打开着eclipse,开始了spring的源码阅读之旅。至此,读源码成了习惯,源码已经进入了我的心里。

后来,springboot的火热,让我也想蹭上一蹭,于是有了springboot的启动源码系列,虽然还在进行中,指侍但是我相信我能将其完成;工作中用到了shiro,我又结合着《跟我学shiro》将shiro的源码看了个大概,有了shiro源码系列博文,还差一篇认证与授权(应该很快就能面世),shiro源码系列就封笔了。最近在搭建自己的后台管理系统,用到了quartz,集成的过程也遇到了一些问题,因此有了quartz的两篇文章。

慢慢的,从一味的网上找资料变成了很多时候会从源码中找答案。不求能读太多的源码,但愿自己接触的技术都能读上一读,路漫漫其修远兮,吾将上下而求索!

大家为什么要读源码?

很多人一定和我一样的感受:源码在工作中有用吗?用处大吗?很长一段时间内我也有这样的疑问,认为哪些有事没事扯源码的人就是在装,只是为了提高他们的逼格而已。

那为什么我还要读源码呢?一刚开始为了面试,后来为了解决工作中的问题,再后来就是个人喜好了。说的好听点是有匠人精神;说的委婉点是好奇(底层是怎么实现的);说的不自信点是对黑盒的东西我用的没底,怕用错;说的简单直白点是提升自我价值,为了更高的薪资待遇(这里对真正的技术迷说声抱歉)。

源码中我们可以学到很多东西,学习别人高效的代码书写、学习别人对设计模式的熟练使用、学习别人对整个架构的布局,等等。如果你还能找出其中的不足,那么恭喜你,你要飞升了!会使用固然重要,但知道为什么这么使用同样重要。从模仿中学习,从模仿中创新。

读源码不像围城(外面的人想进来,里面的人想出去),它是外面的人不想进来,里面的人不想出去;当我们跨进城内,你会发现(还是城外好,皮!)城内风光无限,源码的海洋任我们遨游!

首先我们要对我们的目标有所了解,知道她有什么特点,有些什么功能。对对方都还不了解,就想着进入别人的内心世界,那不是臭不要脸嘛,我们要做一个有着流氓心的绅士;对她有个大致的了解了,就可以发起攻势,一举拿下。

那么怎么样了解了,方式有很多,我这里提供几种,仅供参考

最好的方式就是官方参考指南,亲生父母往往对孩子是最了解的,对孩子的描述也是最详细的;比唯销吵如SpringBootReferenceGuide就是对springboot最详细的描述,怎么样使用springboot、springboot特性等等,通过此指南,springboot在你面前一览无遗;

但是,springboot毕竟是外国人的孩子,如果英语不好,估计读起来有点头疼了,不过我们有google翻译呀,咬咬牙也是能看的。源码世界的丈母娘、老岳丈是非常慷慨的!

其次是书籍,国外优秀的有很多,国内也不乏好书,比较推荐此方式,自成体系,让我们掌握的知识点不至于太散。这就是好比是源码的闺蜜,对源码非常了解,重点是挺大方,会尽全力帮助我们了解源码。

再次就是博客,虽然可能觉得知识点比较散,但是针对某个知识点却特别的细,对彻底掌握非常有帮助,园子内就有很多技术大牛,写的博客自然也是非常棒,非常具有学习价值。当然还有社区、论坛、github、码云等等。这就是源码的朋友圈,我们从中也能获取到非常多关于源码的信息。

设计模式的了解

优秀的框架、技术从不乏设计模式;jdk源码中就应用了很多设计模式,比如IO流中的适配器模式与装饰模式、GUI的观察者模式、集合中的迭代器模式等等;spring源码中也是用到了大量的设计模式。设计模式有什么优点、各适用于什么场景,不是本文的内容,需要我们大家自行去了解。

我们只需要对一些常用的设计模式有个大致了解,再去读源码是比较好的;不需要将23种设计模式都通读,也不需要将常用设计模式完全理解透;对于全部通读,我们时间有限,另外有些模式确实不太好理解、用的少,性价比不高,没必要全部都读。

推荐书籍:《HeadFirstDesignPatterns》(中文版:《HeadFirst设计模式》)、《Java与模式》;

另外我比较推荐的一种学习设计模式的方式是读别人博客:java_my_life,刘伟技术博客,chenssy的设计模式;

设计模式之于源码,就好比逛街购物之于女人,想顺利勾搭源码,我们需要好好掌握设计模式这个套路。

配合ide进行断点追踪

我们通过源码的圈子对源码的了解终究只是停在表面,终究还是没有走进她的内心,接下来我就和大家分享下,我是如何走进她的内心的!

相信看过我的源码博客的小伙伴都知道,我非常喜欢通过idea断点来进行源码追踪,断点追踪源码是我非常推荐的一种方式。断点不仅可以用来调试我们的代码,也可以用来调试我们用到的框架源码。

面对未知的、茫茫多的源码,我们往往没有足够的时间、经历和耐心去通读所有源码,我们只需要去读我们关注的部分即可(有人可能会说我都不关心,这?)。那为什么要用断掉调试的方式来跟源码,而不是直接从源代码入手去跟我们关注的部分呢?

尝试过的小伙伴应该知道,如果我们对源码不熟悉,直接通过源码的方式去跟,一方面很容易迷路(多态,会有很多子类实现),不知道接下来跟哪一个,另一方面也很容易跟丢,当我们跟入的很深的时候,很有可能就忘记上一步跟到哪了。所以读源码的重要性浅显易懂了。

2. JAVA阅读源码,大量英文注释阅读不方便,求集成idea里面的翻译java注释由英文翻译为中文的工具。

学会在idea(eclipse)中阅读、调试源码,是java程序员必不可少的一项技能。


在idea中配完环境后,默认其实也是能够对jdk的源码进行debug调试的。但是无法在源码中添加自己的注释,无法添加自己的理解。如果干瞪眼看的话,可能过段时间,就忘记了。下面就介绍下,如何在jdk源码中为所欲为,像在我们自己的代码中一样写注释、调代码:


打开idea,选择Project->File->Project Structure->SDKs->Sourcepath,初始状态如下图 :


这时,再重新打开jdk的源码类,我们就可以在源java文件中,添加自己的注释了。

一定注意:添加注释时,一定不要新加一行写注释。最好在一行代码的后面,使用//进行注释。否则行号和真正的jre中编译后的代码行号对应不上,如果对源码debug时,会出现代码运行和行号不匹配的情况

3. 如何快速读懂项目源码javaWeb

一:学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring
ioc->log-> 代码
1、先了解项目数据库的表结构,这个方面是最容易忘记 的,有时候我们只顾着看每一个方法是怎么进行的,却没
有去了解数据库之间的主外键关联。其实如果先了解数据 库表结构,再去看一个方法的实现会更加容易。
2、然后需要过一遍web.xml,知道项目中用到了什么拦
截器,监听器,过滤器,拥有哪些配置文件。如果是拦截 器,一般负责过滤请求,进行AOP 等;如果是监 可能是定时任务,初始化任务;配置文件有如使用了 spring
后的读取mvc 相关,db 相关,service 相关,aop 相关的文件。
3、查看拦截器,监听器代码,知道拦截了什么请求,这
个类完成了怎样的工作。有的人就是因为缺少了这一步, 自己写了一个action,配置文件也没有写错,但是却怎么
调试也无法进入这个action,直到别人告诉他,请求被拦
4、接下来,看配置文件,首先一定是mvc相关的,如 springmvc
中,要请求哪些请求是静态资源,使用了哪些 view 策略,controller 注解放在哪个包下等。 然后是db 相关配置文件,看使用了什么数据库,使用了
什么orm框架,是否开启了二级缓存,使用哪种产品作 为二级缓存,事务管理的处理,需要扫描的实体类放在什 么位置。最后是spring 核心的ioc
功能相关的配置文件, 知道接口与具体类的注入大致是怎样的。当然还有一些如 apectj 置文件,也是在这个步骤中完成
5、log
相关文件,日志的各个级别是如何处理的,在哪些 地方使用了log 记录日志
6、从上面几点后知道了整个开源项目的整体框架,阅读 每个方法就不再那么难了。
7、当然如果有项目配套的开发文档也是要阅读的。

4. JAVA中看别人项目源码,从哪里开始看,顺序怎么样 比如 实体类 方法 接口 实现类 还有其他的

首先,如果有别人项目的开发文档,是必须先阅读的东西;
其次,最好借助于开发工具,比如导入eclipse,比如代码中按下ctrl+T就会显示当前类型的关联关系,还可以进行class搜索等。
第三,通过运行代码,跟踪进去,用debug模式查看一些关心的变量和方法是如何被调用和执行的。

MVC项目,可以从下往上看,就是从数据库操作,然后封装, service,到Action,再到页面。

5. JAVA鍒氩紑濮嫔︽槸瑕佸厛鐪嬫簮浠g爜钖鍙鏄涓镣逛篃鐪嬩笉镍傛槸浠涔

链浜轰笉鏄楂樻坠锛岀洿鍒扮幇鍦ㄨ缮鍦ㄥ堕噷瀛︺傛寜鐞呜存槸娌℃湁璧勬牸鍦ㄦゅ敔鑸岀殑
浣嗘槸鍐欎简涓镣逛唬镰侊纴浜烘湁镣圭疮銆备簬鏄涓婃潵鐜╃帺
鎴戣夊缑搴旇ヤ粠链锘虹镄勫﹁捣锛氭暟鎹绫诲瀷銆佸彉閲忋佽繍绠楃︺佽〃杈惧纺銆佽鍙ャ佹寚浠ゃ侀‘搴忥纴阃夋嫨锛屽惊鐜锛屾暟缁勶纴鍑芥暟 缁撴瀯(瀵逛互钖庡︿範绫诲ぇ链夊府锷)
链濂戒互c涓轰緥
杩欐柟闱㈢殑濂戒功链<<C绋嫔簭璁捐>>璋娴╁己鏁欐巿镄,<<21澶╁﹂欳璇瑷>>,鐞兼柉甯冩湕镄勶纴钖庤呭﹁捣𨱒ヨ交𨱒句竴浜涘墠钥呭圭亩鍗旷畻娉曟秹鍙婄殑澶氢竴浜
铹跺悗绠鍗曞湴瀛︿竴涓婥++,涓崭竴瀹氶潪寰楀﹀お澶氾纸褰撶劧浜嗙簿锷涘厖娌涘逛箣鍏磋叮娴揿帤镄勪緥澶栵级锛屼互灏佽咃纴缁ф圹銆佸氭佷负涓
褰撶劧浜嗕篃鍙涓嶈繘琛岀浜屾ョ洿鎺ュ紑濮嫔Java锛屼笉杩囩涓姝ヤ竴瀹氲佽蛋濂
镊充簬Java鏂归溃锛屾妸鍓嶉溃浜屾ョ敋镊崇涓姝ュ仛濂戒简瀛﹁捣𨱒ュ緢瀹规槗锛屾垜涔熸病鐪嬩粈涔圱hink in Java
绁濅綘鎴愬姛锛佸厖鍒呜呖Java涓銮峰缑涔愯叮......

6. 你好,我刚开始学JAVA,昨天看了点源码有点疑问

这个是叫做构造函数的重载。
这样子写的原因是:
有时候你会声明 Person people=new Person("lihong");
有时候你会声明 Person people=new Person("lihong","west");
如果不都实现的话,上面两种声明就不能这样用了!

阅读全文

与java源码看不懂相关的资料

热点内容
哪里购买黄金app 浏览:661
中国联通app优惠购功能在哪里 浏览:227
dream服务器密码是什么 浏览:222
程序员自救 浏览:486
cmd杀死进程命令 浏览:235
ipad激活服务器地址 浏览:451
单片机开始直流电机压降问题 浏览:17
服务器地址失败怎么办 浏览:146
安卓手机怎么下载苏联游戏 浏览:130
主教的命令 浏览:805
php判断变量为空 浏览:743
你演我猜安卓版本怎么用 浏览:910
已够app哪里看 浏览:1007
程序员怎么学会开车的技巧 浏览:785
网易邮箱如何删除服务器邮件 浏览:154
java多个泛型 浏览:276
安卓折扣号怎么充值 浏览:604
行政决定行政命令 浏览:895
linux下的软连接 浏览:606
fib在python是什么意思 浏览:534