IDEA设置查看JDK源码

问题

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

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;
            }
        }
    }

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

配置步骤

下载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

相关推荐
卓怡学长2 小时前
w192基于springboot“考研情报站”微信小程序设计与实现
java·spring boot·spring·微信小程序·intellij-idea
卓怡学长8 小时前
w193基于springboot“乐通黄骅”电动车智能充电服务小程序
java·spring boot·spring·小程序·intellij-idea
深度之眼1 天前
如何判断自己的idea是否可行?是否有人做过?
深度学习·intellij-idea
卓怡学长1 天前
w194基于ssm新能源汽车充电系统小程序
java·小程序·intellij-idea
卓怡学长1 天前
w195基于ssm“Fitfrend”个性化健身
java·intellij-idea
卓怡学长2 天前
w198基于springboot始于足下健康打卡平台的设计与实现
java·spring boot·spring·intellij-idea
不灭的黄金瞳1232 天前
Java继承与多态
java·intellij-idea
我要神龙摆尾2 天前
IDEA 阅读插件
java·ide·intellij-idea·idea-plugs·plugs
梦幻通灵2 天前
IDEA 实用快捷键【持续更新】
java·ide·intellij-idea
卓怡学长3 天前
w214基于jsp知道特产网
java·intellij-idea