为什么要学习JDK源码
作为Java程序员,JDK源码的作用就像"道生一,一生二,二生三,三生万物"。源码是大师们的智慧的结晶,我们所要做的是就是站在巨人的肩膀之上,在技术之路上成长、提高,也将编码做成一门艺术。当然了,实际的角度而言,由于当前软件业的发展,有限的岗位和大量程序员导致我们在面试时经常被询问JDK源码的理解。JDK源码是个浩繁的工程,我们只能一点一点去挖掘,并时刻标记上自己挖掘的心得体会,所以作者在参考了其他博主的笔记之后,也搭建如此环境并记录下来并同步到自己的gitee上。
学习环境准备
- JDK8.
- Intellij IDEA 2021.1
- apache-maven-3.8.1
- win10操作系统
源码学习环境搭建
1. 在idea中新建一个maven项目,取名叫jdk-source-learning。
2. pom文件中引入junit4 maven依赖,作为后续测试源码时写单元测试使用。
<dependency>
<!--引入junit单元测试框架-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
3. 打开自己的JDK安装目录,找到source.zip
文件,这个即是源码,解压缩后复制粘贴到我们的maven工程里的java目录下,直接拷贝进IDEA中会有问题,我们直接拷贝到源目录下
4. 增大Build process heap size。
File->Settings->Build,Execution,Deployment->Complier,然后设置process heap size为1700,默认是700.
5. 设置单步调试。
File->Settings->Build,Execution,Deployment->Debugger->Stepping
6. 重新关联JDK源码,允许我们在调试我们导入的JDK源码进行注释操作。
File->Project Structure->Platform Settings->SDKs->Sourcepath
默认配置如下:
我们移除默认SDKs,然后添加入我们源码目录。
7. 导入tools.jar。
File->Project Structure->Libraries
8. 从OpenJDK把UNIXToolKit、FontConfigManager给放置到java目录下新建的sun.awt
、sun.font
目录对应的目录下。
源码参考阅读顺序。
- java.lang :Java的基本语法。
- java.lang.annotation: Java注解。
- java.lang.reflect:Java反射。
- java.util:Java工具类。
- java.util.concurrent:并发包。
- java.util.function +java.util.stream:函数编程和流编程。
- java.io + java.nio:Java IO、NIO的读写。
- java.net:Java网络编程
单元测试代码
我们在test目录下给String类的转换为大写的方法写个单元测试,并且进行Debug调试等。
package com.tgy.java.lang;
import org.junit.Assert;
import org.junit.Test;
public class StringTest {
@Test
public void toUpperCase() {
String str="hello,jack!";
String upperCase = str.toUpperCase();
Assert.assertTrue("HELLO,JACK!".equals(upperCase));
}
}