您的位置  > 互联网

为什么要读JDK源码当然不是为了装,毕竟谁没事找事虐自己

当然不只是为了炫耀,毕竟谁会找麻烦来虐待自己……

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网络通信(典型:通信)相关的源码。

共勉

阅读源代码时不要着急。 放慢速度才能更快! 共勉。

-结尾-