当然不只是为了炫耀,毕竟谁会找麻烦来虐待自己……
1.你无法逃避面试。 现在,只要你面试Java相关的职位,肯定都会或多或少的涉及到JDK源码相关的问题。
2.在明白原理之前不要惊慌。 作为JDK的用户,虽然我们每天都喜欢使用它,但有时遇到问题时,我们还是要看看底层源码,以帮助我们更好地理解原理。
3.学习优秀的代码、思想和模式。 毕竟,JDK 是一个优秀的代码库。 我们每天都会用到它,源代码就在里面。 作为一个有抱负的程序员,阅读源码也可以让我们吸收更多优秀的思想和模式。
4、睡前催眠。 嗯...但它确实有效(有趣)。
源码难吗?
废话,当然很难,不然我也不会做到现在,还经常忘记,哭……
毕竟像JDK这样的源码和我们平时手写的小例子、业务代码不一样。 毕竟它是一个类库。 为了考虑性能、稳定性、通用性、可扩展性等因素,添加了很多辅助代码和泛型。 ,还有一些设计模式的考虑,所以看起来肯定没那么容易,没办法一眼看穿。
所以这个事情一定是一个长期的过程。 我个人建议(包括我自己),当你遇到一些问题的时候,可以顺着某些组件或部分的源码到底层去看看。 ,然后做一些笔记,写一些评论等等,这样就可以慢慢参透很多内容。
但我们要有足够的信心。 我坚信别人写了代码,但我不相信,因为我看不懂!
如何阅读源代码
1、方法一:点播。 如果您对某个组件、语法或功能感兴趣,或者遇到任何问题或疑问,可以关注底层源码,按需查看。 这也是一种更有效的阅读方式,可以快速建立信心。
2、方法二:系统阅读。 下面详细推荐具体的阅读内容和顺序。
3、多次调试:如果只靠眼睛,然后在心里调试屏幕,是相当困难的。 最好用IDE手工调试一下,两步就知道了。
4.不要只看书,读完后记得留下一些东西。我认为读多少并不重要。 重要的是你能输出多少。 总结、总结、写评论、做笔记。
因此,我们下面要搭建一个Java源码阅读和调试环境。 建议每个人都拥有一个。 每当你突发奇想、遇到问题、遇到疑惑、或者感到无聊时,都可以打开项目看一下源码,并做笔记和评论。 。
搭建源码阅读和调试环境
我个人认为查看源代码应该在单独的Java项目中完成。 源代码应该放在里面,测试代码也应该放在里面。 一起调试、看代码、写注释更方便。
1.创建源码阅读项目
就选择最常见的Java基础项目:
2.创建两个目录
他们是:
3.导入JDK源码
很多朋友问JDK的源码在哪里?
很远,但就在你的面前,你居然可以在JDK的安装目录下找到它。
JDK安装目录下有一个名为src.zip的压缩包,就是JDK源码!
解压并复制到上述项目的目录下,这样JDK源码就会被导入。
有的朋友可能会有疑问,为什么要在这个项目中导入一份JDK源码呢? 其实主要是为了方便我们阅读、调试以及在源码中做笔记和注释。
至于如何使用这个JDK源码,我们下面继续讲解。
4.调试与运行
我们可以在test目录下自由编写一段测试代码。
比如我就以此为例,在test目录下创建一个子目录,然后在里面创建一个测试主入口文件Test.java,随意放一段测试代码:
public static void main( String[] args ) {
Map hashMap = new HashMap<>();
hashMap.put( "k1", 0.1 );
hashMap.put( "k2", 0.2 );
hashMap.put( "k3", 0.3 );
hashMap.put( "k4", 0.4 );
for ( Map.Entry entry : hashMap.entrySet() ) {
System.out.println( entry.getKey() +":" + entry.getValue());
}
}
然后开始调试。
但会有几个问题需要一一解决。
问题一:Build启动调试时报错,提示系统资源不足。
解决方案:增加构建堆大小。
设置方法:-->Build,,-->,增加默认值700,比如我这里设置为1700:
问题2:我想从外代码F7单步调试进入JDK源码,却发现进不去。
这是因为JDK源代码在调试过程中受到保护。 一般不允许单步调试,但可以设置。
解决方案::
--> 构建,, --> -->
问题3:JDK源码如何注释?
调试进入JDK源码后,发现无法注释,并且每个文件上都有一个小锁图标。 这是因为关联的源码并不是刚刚复制到我们项目中的源码,而是JDK安装目录下的src。 zip 只读压缩包。
解决方案:将JDK源码路径重新关联到项目路径下的JDK源码。
这样我们就可以愉快地对JDK源码进行调试和注释了。
源码结构及阅读顺序
毕竟JDK源码太大了,全部看完是不现实的。 我们还是愿意根据日常使用情况以及采访检查的频率,挖掘出重要的内容先看一下。
如果你没有特别的计划,可以按照如下推荐的阅读顺序进行:
具体内容介绍如下:
1.java.lang
这其实就是Java的基本语法,比如各种基本包装类型(、Long等)、基本类(、Class、Enum、、)等……
2.java.lang。
包含Java注解基本元素相关的源代码
3.java.lang。
包含与Java反射基本元素相关的代码
4.java.util
这里是Java的所有基本工具。 最典型、最常用的是各种容器和集合(List、Map、Set)
5.java.util。
著名的JUC包包含与Java并发和多线程编程相关的代码。
6.java.util.+java.util。
包含Java函数式编程的常用接口和代码
7. java.io
包含Java传统I/O相关的源代码,主要是面向字节和流的I/O
8.java.nio
包含Java非阻塞I/O相关的源代码,主要是缓冲区、通道和选择器的I/O
9.java.time
包含Java新的日期和周期相关的代码,最典型的有等等。
10.java.数学
主要包含一些高精度运算的支持数据类
11.java.数学
主要包含一些高精度运算的支持数据类
12.
主要包含Java网络通信(典型:通信)相关的源码。
共勉
阅读源代码时不要着急。 放慢速度才能更快! 共勉。
-结尾-