IDEA搭建JDK源码学习环境(可添加注释、修改、debug)

工程详见:https://github.com/wenpanwenpan/study-source-jdk1.8.0_281

1、找到src.zip和javafx-src.zip

  • 找到你想要调试的JDK,笔者本地电脑上装了两个版本的JDK,这里以jdk1.8.0_281为例
  • 将JDK目录下的javafx-src.zip和src.zip两个压缩包进行拷贝(这里就是源码)

在这里插入图片描述

2、新建目录并解压压缩包

  • 新建一个目录,由于笔者这里是基于jdk1.8.0_281的JDK拷贝出来的zip,所以笔者建了一个名为study-source-jdk1.8.0_281的文件夹,表示用于学习jdk1.8.0_281源码,并且在该目录下新建了一个名称为 jdk1.8.0_281-source 的目录用于存放javafx-src.zip和src.zip解压后的源码
  • 将上一步拷贝出来的两个zip压缩包解压到 jdk1.8.0_281-source目录下
    在这里插入图片描述

3、新建测试项目

  • 笔者这里为了方便管理和以后查看,所以将测试项目建在了和源码目录(jdk1.8.0_281-source)同级的目录下

    • jdk1.8.0_281-source 下存放的是解压后的JDK源码
    • 同级目录下的tests是笔者建立的测试项目
      在这里插入图片描述
  • 测试项目建好后的目录整体结构如下
    在这里插入图片描述

4、替换测试工程的sourcePath

  • 找到project settings
  • 然后找到SDKs,然后找到jdk,然后找到sourcePath进行替换

在这里插入图片描述

5、选择测试项目依赖的jdk

  • 可以看到该JDK就是我们刚刚替换sourcePath的JDK
    在这里插入图片描述

6、idea debug设置调整

  • 找到Execution,Deployment ,Deployment
  • 然后找到Debugger
  • 然后找到Stepping
  • Do not step into the classes中的java.*javax.*的勾去掉
    在这里插入图片描述

7、测试验证

  • 经过上面的一系列步骤,我们的测试项目就搭建好了,这里新建一个类来测试一下,看看是否能跳转到我们修改后的源码里

①、在测试工程里编写一个测试类

package org.study.source.jdk;import java.util.HashMap;
import java.util.Map;/*** 测试类*/
public class Test {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("wenpan","hello");System.out.println(map);}
}

②、debug源码

  • 可以看到成功进入源码里了,我们可以对该源码添加自定义注释或修改

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL45讲 -- MYSQL中的锁

根据加锁的范围&#xff0c;MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类 全局锁 使用FTWRL命令 该锁让整个库处于只读状态的时候&#xff0c;可以使用这个命令&#xff0c;之后数据库的更新事务会被阻塞 使用场景&#xff1a;全库逻辑备份 FTWRL与readOnly的区别 如果…

详解SpringCloud微服务技术栈:ElasticSearch实践2——RestClient查询并处理文档

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;ElasticSearch搜索结果处理&#xff08;排序、分页、高亮&#xff09; &#x1f4da;订…

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求&#xff1a;为了实现在linux上模拟服务器跑代码&#xff0c;并存储在mysql上&#xff0c;通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

VUE中一些概念的理解

Vue 中 computed、mounted 和 methods 的基本理解。 computed 计算属性 (computed)&#xff1a;主要用于根据现有的响应式数据&#xff08;即 data 中的数据或其他 computed 属性&#xff09;进行计算并返回一个新的值。计算属性是基于它们的响应式依赖进行缓存的。只有当依赖…

vite项目配置本地开发使用https访问,3分钟搞定

在开发过程中&#xff0c;有时候需要用到一些音视频接口等需要https才能拿到权限&#xff0c;为方便开发过程中调试&#xff0c;这里就介绍几种vite项目快速开启https访问的方式。vite配置项说明文档&#xff1a;开发服务器选项 | Vite 官方中文文档 第一种&#xff1a;使用插件…

api管理工具的新发现

一、之前用过的api管理工具 关于api管理工具&#xff0c;之前用过yapi和postman&#xff0c;但是后来发现了这两个工具 二、新发现的更强大的&#xff1a;Apifox和Eolink Apifox和Eolink&#xff0c;那这两个工具有什么优势呢&#xff1f; 2.1Apifox 其中 Apifox Postman …

Xlua分析:Lua调用C#

在之前的博客Lua与C#交互初析-CSDN博客中讲了有关lua和c#交互的比较浅层的概念&#xff0c;即C#侧注册[LuaCallCSharp]和[CSharpCallLua]的标签后&#xff0c;即可实现双侧沟通。但是还是没有讲明白里面的一些具体内容包括参数传递、xlua栈调用&#xff0c;甚至是C#如何调用lua…

SpringBoot引入 liteflow 规则引擎,yyds!

1前言 在日常的开发过程中&#xff0c;经常会遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 在这样的场景下&#xff0c;使用策略和模板模式的结合可以很好的解决这个问题&#xff0c;但是使用编码的方式会使得文件太多,在业务的部分环节可以这…

R语言【taxlist】——levels():获取或设置分类等级列表

Package taxlist version 0.2.4 Description 分类层次结构可以设置为 taxlist 对象中的级别&#xff0c;按从低到高的顺序排列。 在 taxlist 对象中为特定分类概念添加分类级别。此外&#xff0c;概念限制的变化可能涉及其分类层次结构的变化。 Usage levels(x)## S3 method…

五、C#与数据库交互(数据绑定与数据视图控件)

在C#中&#xff0c;与数据库进行交互是常见的任务&#xff0c;尤其是在.NET环境中。你可以使用ADO.NET&#xff0c;Entity Framework或Dapper等框架来实现与数据库的交互。以下是一个简单的例子&#xff0c;展示如何使用ADO.NET来从数据库中获取数据并绑定到Windows Forms应用程…

python基础3

7.5 range range 可以生成数字供 for 循环遍历 , 它可以传递三个参数&#xff0c;分别表示 起始、结束和步长。 8. 数据类型高级 8.1 字符串高级 字符串的常见操作包括&#xff1a; 获取长度 :len len 函数可以获取字符串的长度。 查找内容 :find 查找指定内容在字符…

Compose | UI组件(五) | Button 按钮组件

文章目录 前言Button 是什么&#xff1f;Button的创建Button显示水平方向的UI IconButton是什么&#xff1f;IconButton是创建 FloatingActionButton是什么&#xff1f;FloatingActionButton创建 ExtendedFloatingActionButton是什么&#xff1f; 总结 前言 随着移动端的技术不…

java—AWT

AWT 课程&#xff1a;1、GUI编程简介_哔哩哔哩_bilibili 一.介绍 包含了很多类和接口&#xff01;GUI&#xff01;元素&#xff1a;窗口、按钮、文本框java.awt 二.窗口 1.构造 2.方法 // 实例化frame类Frame frame new Frame("这个一个框");// 设置可见性frame.…

Metaphor(EXA) 基于大语言模型的搜索引擎

文章目录 关于 Metaphor使用示例 关于 Metaphor Metaphor是基于大语言模型的搜索引擎&#xff0c;允许用户使用完整的句子和自然语言搜索&#xff0c;还可以模拟人们在互联网上分享和谈论链接的方式进行查询内容。 Metaphor同时还能与LLMs结合使用&#xff0c;允许LLMs连接互联…

帧头不对齐的频段间载波聚合(interCA-NonAlignedFrame)

提升上下行吞吐量是3GPP演进的重要方向之一&#xff0c;其中&#xff0c;载波聚合是提升吞吐量最有效的手段之一。在3GPP R16中&#xff0c;帧头不对齐的频段间载波聚合被提出&#xff0c;可以进一步提升上行吞吐量。 帧头对齐的频段间载波聚合 帧头对其的频段间载波聚合&…

第十三届蓝桥杯省赛C/C++,JAVA,Python研究生组题 质因数个数

4658. 质因数个数 - AcWing题库 给定正整数 n&#xff0c;请问有多少个质数是 n 的约数。 输入格式 输入的第一行包含一个整数 n。 输出格式 输出一个整数&#xff0c;表示 n 的质数约数个数。 数据范围 对于 30%30% 的评测用例&#xff0c;1≤n≤10000 对于 60%60% 的评测用例…

(c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度

适用情况&#xff1a; ①题目中出现最短&#xff0c;最长 ②出现子串、子数组、子数列 给定一个字符串&#xff0c;只包含字母和数字&#xff0c;按要求找出字符串中的最长&#xff08;连续&#xff09;子串的长度&#xff0c;字符串本身是其最长的子串&#xff0c;子串要求&am…

编曲学习:和声音程 调式体系 唱名法 调式调性

34届和声音程 调式体系 唱名法 调式调性https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65af994be4b064a8cb1c3a5f?course_idcourse_2XLKtQnQx9GrQHac7OPmHD9tqbv 34届独立音乐人编曲训练营https://app8epdhy0u9502.pc.xiaoe-tech.com/p/t_pc/course_pc_detail/camp_p…

开源项目提交pr的方式

在开源项目中提交PR&#xff08;Pull Request&#xff09;是一种常见的贡献方式&#xff0c;它允许开发者向项目仓库提交代码更改并请求合并到主分支中。以下是提交PR的一般步骤&#xff1a; Fork仓库&#xff1a;首先&#xff0c;你需要Fork&#xff08;即复制&#xff09;你想…

鸿蒙开发-UI-组件

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 鸿蒙开发-UI-布局-相对布局 鸿蒙开发-UI-布局-格栅布局 鸿蒙开发-UI-布局-列表 ​​​​​​鸿蒙开发-UI-布局-网格 鸿蒙开发-UI-布局-轮播 文章目录 前言 一、按钮 1.创建…