IDEA设置查看JDK源码

问题

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

java 复制代码
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,笔者这里直接选择全部:

测试

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

java 复制代码
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

相关推荐
coder_copy2 小时前
IDEA 2024 使用总结,踩坑
docker·intellij-idea
珹洺3 小时前
Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
java·运维·前端·mysql·intellij-idea·jsp
zhang238390615412 小时前
IDEA add gitlab account 提示
java·gitlab·intellij-idea·idea
界面开发小八哥16 小时前
Java开发工具IntelliJ IDEA v2025.1——全面支持Java 24、整合AI
java·ide·人工智能·intellij-idea·idea
络719 小时前
IDEA导入并启动若依项目步骤(SpringBoot+Vue3)
java·spring boot·mysql·vue·intellij-idea
Brian_Lucky1 天前
在 macOS 上合并 IntelliJ IDEA 的项目窗口
java·macos·intellij-idea
兮动人1 天前
Idea使用github copilot登录bug+解决方案
github·bug·intellij-idea
周杰伦_Jay1 天前
continue插件实现IDEA接入本地离线部署的deepseek等大模型
java·数据结构·ide·人工智能·算法·数据挖掘·intellij-idea
天草二十六_简村人1 天前
Macbook IntelliJ IDEA终端无法运行mvn命令
java·jdk·maven·intellij-idea
小徐Chao努力1 天前
【记录手贱bug日常】IDEA 配置vmoptions后打不开,重新安装,删注册表均无用
java·bug·intellij-idea