共计 1873 个字符,预计需要花费 5 分钟才能阅读完成。
一、JDK 源码的重要性
JDK 源码的重要性显而易见,平时的面试、深刻学习等都离不开 JDK 的源码。当然,JDK 源码是十分优良的代码,咱们之所以浏览 JDK 源码,就是为了了解底层原理、学习优良的设计模式和思维。不过 JDK 源码也是相当难啃的知识点,咱们肯定要有信念,不要畏难,硬着头皮去学习,肯定会有很大的播种的。
二、搭建 JDK 源码浏览我的项目
1、新建我的项目并导入 JDK 源码
首先新建一个一般的 Java 我的项目,笔者这里将我的项目取名为 jdkSourceLearn,大家可自行抉择。
倡议大家新建两个目录,一个叫 source,搁置 JDK 源码;一个叫 test,搁置测试用例。这样层次结构较为清晰,方面学习。
当初导入 JDK 源码,找到装置 JDK 的目录,外面有个叫 src.zip 的文件,那个就是源码的压缩文件。将其解压结束后间接拷贝到我的项目的 source 目录下即可。
2、创立测试用例尝试调试
这里在 test 目录下创立一个相干测试用例并尝试进行调试。
package cn.mambalhb.test;
import java.util.HashMap;
import java.util.Set;
public class HashMapTest {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();
map.put("aaa", "AAA");
map.put("bbb", "BBB");
map.put("ccc", "CCC");
Set<String> keys = map.keySet();
for (String key : keys) {System.out.println(key + "===>" + map.get(key));
}
}
}
设置断点并点击调试后,通常须要期待我的项目 Build 一会,这个时候会呈现一堆谬误,上面来一个一个解决。
3、解决相干问题
(1)系统资源有余
问题提醒如下:
通过提醒能够看出导致这个谬误呈现的起因是内存不够。解决办法当然是加大内存。
点击 File–>Settings–>Build,Execution,Deployment–>Compiler,将 Build process heap size(Mbytes) 选项加大,默认值是 700,笔者这里调至 1200:
(2)程序包 com.sun.tools.javac.* 不存在
问题提醒如下:
这是短少 tools 的 jar 包所导致的。
点击 File–>Project Structure–>Libraries
抉择 JDK 装置目录,在 lib 目录下找到 tools.jar,点击 ok 导入即可。
(3)找不到符号 UNIXToolkit、FontConfigManager
问题提醒如下:
这是因为在 Windows 平台下短少了两个 java 类文件所导致的。
这两个类文件可在 OpenJDK 网站上找到。
留神这里抉择本人相应的 JDK 版本,笔者的是 jdk1.8.0_162。
找到这两个类文件的地位后,将它们复制进我的项目如下图所示的地位中。
此时再调试或者运行测试用例的时候,能够看到曾经胜利运行。
三、欠缺我的项目设置
1、容许调试进入
此时如果咱们打断点进行单步调试的话,能够发现点击 Step Into 无奈进入源码外部,因为 JDK 源码的受爱护的,无奈进入,然而点击 Force Step Into 是能够进入源码外部的。如果想要间接按 F7(即点击Step Into) 进入源码外部的话,须要做如下设置:
点击File–>Settings–>Build,Execution,Deployment–>Debugger–>Stepping,勾销勾选Do not step into the classes。
2、编辑源码文件
如果咱们想要对源码文件做记录或者正文时,会发现源码文件是只读的,无奈编辑。因为此时我的项目关联的源码文件还不是方才复制进我的项目的文件,而是 jdk 装置目录下的源码文件。从新将我的项目关联的源码文件设置成该我的项目下的源码文件即可。
点击 File–>Project Structure–>SDKs
这里将原先的 jdk 装置目录下关联的源码门路删除,增加方才拷贝至我的项目目录下的源码门路。
这个时候,再进行调试进入源码外部的时候,能够发现,文件下面的小锁标记曾经不见了,源码文件也能够进行正文记录了。
四、总结
至此,对于 JDK 源码浏览我的项目的搭建曾经实现。平时学习源码的时候,不能只是光看,肯定要入手调试,在调试的过程中浏览源码,做记录,写正文,缺一不可。将输出转化为输入,坚持下去。