构建JDK源码阅读环境

参考博客:Intellij IDEA搭建jdk1.8.0_202源码阅读环境    博客地址:https://blog.csdn.net/IT_Migrant_worker/article/details/104743218

参考博客:是时候该开始读一读JDK源码了  博客地址:https://blog.csdn.net/wangshuaiwsws95/article/details/105112518

参考视频:B站视频:Java源码盘起来!演示搭建JDK源码阅读环境,利用IDEA搭建Java源码阅读环境视频教程  地址:https://www.bilibili.com/video/BV1V7411U78L?t=335

声明:本文是对上述博客的摘抄和整理。

 

目录

Step1:创建项目

Step2:导入源码

Step3:运行main方法

报错:

解决方法:

1、Error:java: OutOfMemoryError: insufficient memory

2、jdk版本问题排查

3、程序包com.sun.tools.javac.api不存在

4、找不到sun.awt.UNIXToolkit、找不到sun.font.FontConfigManager

解决方法:

测试运行success

Step4:源码调试问题与解决

问题1:想从外层代码F7单步调试进入JDK源码内部,结果发现进不去

问题2:如何对JDK源码做注释?

问题3:源码的结构和阅读顺序



 

Step1:创建项目

打开IDEA,创建一个普通的Java工程,选择好JDK。

Step2:导入源码

由于我们创建项目时选择了JDK8版本,因此会自动配置好代码之间的依赖,我们需要做的就是将源码导入项目。

JDK的源码位于JDK文件夹下的src压缩包里。

导入jdk1.8的src.zip的源码

Step3:运行main方法

报错:

解决方法:

1、Error:java: OutOfMemoryError: insufficient memory

2、jdk版本问题排查

3、程序包com.sun.tools.javac.api不存在

方法一:

手动将jdk安装目录下lib包中tools.jar添加到项目中
File ->Project Structure->Project Settings ->Libraries

发现,问题已解决

 

方法二:删掉抛错方法 : com.sun.source.util.JavaTask

4、找不到sun.awt.UNIXToolkit、找不到sun.font.FontConfigManager

解决方法:

删掉抛错方法 : com.sun.java.swing.plaf.gtk.GTKStyle  和  com.sun.java.swing.plaf.gtk.PangoFonts

或者

导入: http://openjdk.java.net/下的UNIXToolkit.java  和   FontConfigManager.java

 

官网:openjdk :  http://openjdk.java.net/  查询获取

 http://openjdk.java.net/

==》http://hg.openjdk.java.net/jdk8/

==》http://hg.openjdk.java.net/jdk8/jdk8

==》http://hg.openjdk.java.net/jdk8/jdk8/jdk/

==》http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d

==》http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src

==》http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/solaris/classes/sun/awt 【找到UNIXToolkit类,将UNIXToolkit类中的内容拷贝到项目的src\main\java\下,新建“sun\awt”包中的新建“UNIXToolkit.java”中】

==》http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/solaris/classes/sun/font【找到FontConfigManager类,将FontConfigManager类中的内容拷贝到项目的src\main\java\下,新建“sun\font”包中的新建“FontConfigManager.java”中】

相关截图:

选择jdk版本:http://hg.openjdk.java.net/jdk8/

 

http://hg.openjdk.java.net/jdk8/jdk8

http://hg.openjdk.java.net/jdk8/jdk8/jdk/

 

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d

 

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/solaris/classes/sun/awt

找到UNIXToolkit类,将UNIXToolkit类中的内容拷贝到项目的src\main\java\下,新建“sun\awt”包中的新建“UNIXToolkit.java”中

 

找到FontConfigManager类,将FontConfigManager类中的内容拷贝到项目的src\main\java\下,新建“sun\font”包中的新建“FontConfigManager.java”中

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/solaris/classes/sun/font

测试运行success

Step4:源码调试问题与解决

问题1:想从外层代码F7单步调试进入JDK源码内部,结果发现进不去

这是因为调试时,JDK源码受保护,一般单步调试不让进,但是可以设置。

解决方法:

Settings --> Build,Execution,Deployment --> Debugger --> Stepping

 

 

问题2:如何对JDK源码做注释?

试进入JDK源码以后,发现不能进行注释,每个文件上都有一个小锁的图标,这是因为现在关联的源码并不是我们项目里刚拷进去的源码,而是JDK安装目录下的src.zip只读压缩包。

解决办法: 重新关联JDK源码路径为本项目路径下的这一份JDK源码。

Project Structure -->  SDKS   修改 sourcepath 源码路径对应的src.zip 为 当前项目导入的src源码路径:D:\idea2019_workspace\JavaSourceLearn\src

结果:

问题3:源码的结构和阅读顺序

顺序:

(1) lang    (2) util    (3)io    (4)nio    (5)time  (6) math   (7) net

 

具体的内容简介如下:

1、java.lang

这里面其实就是Java的基本语法,比如各种基本包装类型(IntegerLongDouble等)、基本类(ObjectClassEnumExceptionThread)等等…

2、java.lang.annotation

包含Java注解基本元素相关的源码

3、java.lang.reflect

包含Java反射基本元素相关的代码

4、java.util

这里面放的都是Java的基本工具,最典型和常用的就是各种容器和集合(ListMapSet

5、java.util.concurrent

大名鼎鼎的JUC包,里面包含了Java并发和多线程编程相关的代码

6、java.util.function +java.util.stream

包含Java函数式编程的常见接口和代码

7、java.io

包含Java传统I/O相关的源码,主要是面向字节和流的I/O

8、java.nio

包含Java非阻塞I/O相关的源码,主要是面向缓冲、通道以及选择器的I/O

9、java.time

包含Java新日期和期间相关的代码,最典型的当属LocalDateTimeDateTimeFormatter

10、java.math

主要包含一些高精度运算的支持数据类

11、java.net

主要包含Java网络通信(典型的如:Socket通信)相关的源代码。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值