JDK源码阅读工程搭建
前几天在B站看了CodeSheep的视频,搭建一个JDK源码阅读的工程,觉得这个可以有,于是也自己搭了一套,分享一下
- 首先创建一个普通的Java工程
- 基本的工程创建好后,我们找到jdk的安装目录,在其中找到jdk源码的压缩包
- 这个压缩包解压出来之后就是jdk的源码了
-
把解压得到的源码直接复制到我们工程所在目录,不要在IDE里复制,这个会比较慢,复制好之后再看IDE就可以看到我们的源码了
-
有了源码之后在test里写个类debug测试一下
-
欸,这个时候我们会发现一个问题,编译的时候找不到sun.awt.UNIXToolkit这个类,这时我们看看具体的包,可以看到,这里3个编译报错的类都在gtk这个包里,鉴于我们这个工程只是来阅读JDK的源码,这个报错的包无关紧要,粗暴点直接删掉不管
-
解决了上一个问题后,发现还有一个类有问题
-
这时,我们需要在Project Structure里,把jdk的lib包拉进来,如图
-
把lib包拉进来后,我们就可以发现没有报错了,但是编码仍然有问题,这个是因为编译时分配的资源不足,我们给他调大一点,调到1700
-
解决了这个问题,我们再来debug试一下,终于。。。进断点了
-
接下来我们F7进去看一看,欸,怎么没进源码???我们来看看设置,把这个勾取消
-
接下来我们再F7进去看一看,欸,咋还是没进我们工程里加进来的源码?
-
这时候我们需要在设置里把引用的jdk源码的路径改为我们工程里面的路径,先把原来的删掉
-
然后把源码指向我们工程的目录
-
OK,再来试一下吧
终于,进到了我们自己的目录,接下来尽管F7吧
-
最后,是一些CodeSheep关于源码阅读顺序的建议:
-
java.lang:这里面其实就是Java的基本语法,比如各种基本包装类型(Integer、Long、Double等)、基本类(Object,Class,Enum,Exception,Thread)等等…
java.lang.annotation:包含Java注解基本元素相关的源码 java.lang.reflect:包含Java反射基本元素相关的代码
-
java.util:这里面放的都是Java的基本工具,最典型和常用的就是各种容器和集合(List、Map、Set)
java.util.concurrent:大名鼎鼎的JUC包,里面包含了Java并发和多线程编程相关的代码 java.util.function +java.util.stream:包含Java函数式编程的常见接口和代码
-
java.io:包含Java传统I/O相关的源码,主要是面向字节和流的I/O
-
java.nio:包含Java非阻塞I/O相关的源码,主要是面向缓冲、通道以及选择器的I/O
-
java.time:包含Java新日期和期间相关的代码,最典型的当属LocalDateTime、DateTimeFormatter等
-
java.math:主要包含一些高精度运算的支持数据类
-
java.net:主要包含Java网络通信(典型的如:Socket通信)相关的源代码。