当前位置: 首页 > news >正文

IDEA设置查看JDK源码

问题

我们在查看JDK源码时,可能会遇到这种情况,步入底层查看JDK源码时,出现一堆var变量,可读性非常之差,例如笔者最近想看到nio包下的SocketChannelImplwrite方法,结果看到这样一番景象:

public int write(ByteBuffer var1) throws IOException {if (var1 == null) {throw new NullPointerException();} else {Object var2 = this.writeLock;synchronized(this.writeLock) {this.ensureWriteOpen();int var3 = 0;boolean var20 = false;byte var5;label310: {int var27;try {var20 = true;this.begin();Object var4 = this.stateLock;synchronized(this.stateLock) {if (!this.isOpen()) {var5 = 0;var20 = false;break label310;}this.writerThread = NativeThread.current();}do {var3 = IOUtil.write(this.fd, var1, -1L, nd);} while(var3 == -3 && this.isOpen());var27 = IOStatus.normalize(var3);var20 = false;} finally {if (var20) {this.writerCleanup();this.end(var3 > 0 || var3 == -2);Object var11 = this.stateLock;synchronized(this.stateLock) {if (var3 <= 0 && !this.isOutputOpen) {throw new AsynchronousCloseException();}}assert IOStatus.check(var3);}}this.writerCleanup();this.end(var3 > 0 || var3 == -2);Object var28 = this.stateLock;synchronized(this.stateLock) {if (var3 <= 0 && !this.isOutputOpen) {throw new AsynchronousCloseException();}}assert IOStatus.check(var3);return var27;}this.writerCleanup();this.end(var3 > 0 || var3 == -2);Object var6 = this.stateLock;synchronized(this.stateLock) {if (var3 <= 0 && !this.isOutputOpen) {throw new AsynchronousCloseException();}}assert IOStatus.check(var3);return var5;}}}

所以本文就带大家演示如何添加OpenJDKzip包确保可以阅读到源码。

配置步骤

下载OpenJDK的zip包

首先我们步入官网,地址:https://hg.openjdk.org/,然后选择所需的JDK版本进行下载,以笔者为例选择JDK8

在这里插入图片描述

然后选择JDK进入下一个界面:

在这里插入图片描述

直接点击zip即可开始下载:

在这里插入图片描述

完成卸载后我们会得到这样一个zip包。

在这里插入图片描述

添加到IDEA中

基于IDEA查看我们要查看源码的项目,点击Project Structure,选择Sourcepath,点击添加,将刚刚的zip包添加进来。

在这里插入图片描述

随后会弹出这样一个页面,要我们选择需要导入的classes,笔者这里直接选择全部:

在这里插入图片描述

测试

随后我们再次查看对应源码,所有的变量都语义化了:

public int write(ByteBuffer buf) throws IOException {if (buf == null)throw new NullPointerException();synchronized (writeLock) {ensureWriteOpen();int n = 0;try {begin();synchronized (stateLock) {if (!isOpen())return 0;writerThread = NativeThread.current();}for (;;) {n = IOUtil.write(fd, buf, -1, nd);if ((n == IOStatus.INTERRUPTED) && isOpen())continue;return IOStatus.normalize(n);}} finally {writerCleanup();end(n > 0 || (n == IOStatus.UNAVAILABLE));synchronized (stateLock) {if ((n <= 0) && (!isOutputOpen))throw new AsynchronousCloseException();}assert IOStatus.check(n);}}}

参考

idea查看 rt.jar源码:https://blog.csdn.net/yangyangrenren/article/details/117554745

http://www.lryc.cn/news/260792.html

相关文章:

  • SSM—Mybatis
  • MYSQL在不删除数据的情况下,重置主键自增id
  • SpringMVC-servlet交互
  • DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点
  • git 的使用
  • 详解—【C++】lambda表达式
  • Qt Desktop Widgets 控件绘图原理逐步分析拆解
  • 什么是rocketmq❓
  • 【网络安全】HTTP Slowloris攻击原理解析
  • 从最近爆火的ChatGPT,我看到了电商的下一个形态
  • 云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆
  • 大创项目推荐 深度学习 opencv python 实现中国交通标志识别
  • 深度学习实战67-基于Stable-diffusion的图像生成应用模型的搭建,在Kaggle平台的搭建部署,解决本地没有算力资源问题
  • 云原生之深入解析Kubernetes本地持久化存储方案OpenEBS LocalPV的最佳实践
  • 设计模式-策略(Strategy)模式
  • Star 4.1k!Gitee GVP开源项目!新一代桌面应用开发框架 ElectronEgg!
  • node.js学习(简单聊天室)
  • cfa一级考生复习经验分享系列(四)
  • PPT插件-好用的插件-放映笔、绘图板-大珩助手
  • 弧形导轨的安装注意事项
  • Elasticsearch优化-04
  • Springboot+vue的公寓报修管理系统(有报告)。Javaee项目,springboot vue前后端分离项目
  • uniapp腾讯地图路线规划
  • Python 全栈体系【四阶】(五)
  • 原点处可微问题
  • Flink+Kafka消费
  • Seconds_Behind_Master越来越大,主从同步延迟
  • 除法求值[中等]
  • 新时代商业市场:AR技术的挑战与机遇并存
  • RHEL8中ansible的使用