【手把手带你撸jdk源码一】看源码的正确打开方式

👁️ 5941 ❤️ 379
【手把手带你撸jdk源码一】看源码的正确打开方式

博客主页:进入博客

作者简介:从业2.5年的全栈工程师,分享关于Java、数据库、设计模式等后端内容,偶尔分享前端知识

本文介绍了为什么要阅读jdk源码,jdk文件夹中目录结构及其作用,Java程序能够运行的原理

目录

一、为什么要阅读源码?

二、jdk目录结构和作用

1.bin文件夹:jdk中包含各种Java开发工具的二进制文件所在的文件夹。重要工具有:

2.lib文件夹:这个文件夹包含了jdk所需的库文件,一些重要的jar包括:

3.jre文件夹:JRE(Java运行时环境)包含Java运行时环境 ,用于执行Java程序。JRE包括一些子文件夹和文件,如:

4.include文件夹:这个文件夹包含了用于本地开发的头文件,用于在本地编写和编译与Java Native Interface(JNI)相关的代码,以便在Java和本地代码之间进行交互。

5.src.zip文件:这个文件包含了Java标准库的源代码,可以用于查看标准库的实现细节。

三、Java程序是如何跑起来的?

四、阅读jdk源码做法

一、为什么要阅读源码?

当你做项目时,你要使用列表,使用ArrayList还是LinkedList?当要求线程安全时,你又是否了解线程安全的集合类?多线程中,面对如此多的队列类型,不了解它们的前提下,选择哪一个呢?作为一个Javaer,不熟悉自己手中的工具如何得行?

当你面试时,对面穿着格子衬衫圆顶的25岁小伙问你,HashMap的底层原理是什么?你多少有点尴尬吧?

通过学习Jdk源码,我们不单单能深入了解Java的各种工具类,还能学习到源码中蕴含的各种设计模式,学习jdk的代码设计。

好,决定要学了,我猜现在马上便在搜索引擎输入“jdk源码下载”,咔咔一顿安装网上五花八门的教材去下载源码,导入到你的eclipse或者idea里面去,咔咔开始看起了源码。这样的做法是能够顺利搭出来一个阅读环境,但后面可能会面临一些其他麻烦。

既然是看的jdk——Java开发者工具源码,我们先了解jdk文件夹的结构、作用以及其工作原理。

二、jdk目录结构和作用

jdk1.8的文件夹

1.bin文件夹:jdk中包含各种Java开发工具的二进制文件所在的文件夹。重要工具有:

javac:Java编译器,用于将Java源代码编译成字节码文件。java :Java运行时环境,执行已编译的Java字节码文件javap:Java反编译工具,用于查看字节码文件的内容javadoc:用于生成Java文档的工具

2.lib文件夹:这个文件夹包含了jdk所需的库文件,一些重要的jar包括:

rt.jar:Java标准库的运行时部分,包含Java核心类和APItools.jar:包含一些开发工具类,例如javac编译器的实现,也就说明javac依赖于tools.jar

3.jre文件夹:JRE(Java运行时环境)包含Java运行时环境 ,用于执行Java程序。JRE包括一些子文件夹和文件,如:

lib文件夹:包含JRE运行时所需的库文件,包括各种支持的类和JAR包bin文件夹:包含了JRE运行时使用的可执行文件,如java命令

注意:lib文件夹中的endorsed文件夹,这个目录允许我们一些特殊的类库放到其中供项目使用,并且项目运行时会优先使用这些jar包。此文件夹在Java9已被弃用。

4.include文件夹:这个文件夹包含了用于本地开发的头文件,用于在本地编写和编译与Java Native Interface(JNI)相关的代码,以便在Java和本地代码之间进行交互。

5.src.zip文件:这个文件包含了Java标准库的源代码,可以用于查看标准库的实现细节。

三、Java程序是如何跑起来的?

众所周知,Java是跨平台的语言,之所以跨平台还是依靠其运行机制。Java源码需要跑起来,先通过编译器编译成字节码文件,该字节码文件在jvm(Java虚拟机)执行。JVM需要JRE来运行程序,后者包括前者。

java文件 ——(编译器)——>class文件——(jre,jvm)——程序启动

其中jre中含有rt.jar等jar包,而rt.jar包其实就是jdk源码编译打包而来。程序依赖于jre环境,jre中jar包是Java源码编译而来。

四、阅读jdk源码做法

找到我们本地的jdk安装路径,找到其中src包并解压IDE中新建项目,将解压出来的文件复制到项目中(此事便可阅读并修改源码)编译上述项目,并将编译后文件复制到endorsed文件夹中(覆盖jre中相同java源文件编译后文件,在该jre运行的程序优先选择此jar包)IDE中Debug Configurations配置source为上述项目,打断点会关联java源文件,如图所示

eclipse中Debug Configurations配置

好的,现在我们就可以在IDE中阅读jdk源码,并且让编译后的jar在系统中的jre中生效并被优先选择,经过配置调试程序也会走源代码中的.java文件(而不是.class文件)。

但请注意,开发项目时请删除endorsed文件夹内jar包,避免污染开发环境。

本文仅介绍了我们为什么要阅读jdk源码、jdk目录结构和浅谈了程序运行的原理。

后续作者将详细介绍jdk阅读环境的搭建,重要工具类的介绍。

← 南孚电池 秦时丽人明月心 →