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

相关推荐

  1. IDEA Gradle 下载

    2023-12-16 04:56:04       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 04:56:04       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 04:56:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 04:56:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 04:56:04       18 阅读

热门阅读

  1. linux电源管理

    2023-12-16 04:56:04       35 阅读
  2. 微信小程序实现图片下载与保存功能

    2023-12-16 04:56:04       83 阅读
  3. Kotlin中对生成二维码的使用详解

    2023-12-16 04:56:04       34 阅读
  4. jmeter 的beanshell使用

    2023-12-16 04:56:04       24 阅读
  5. GAN 介绍

    2023-12-16 04:56:04       39 阅读
  6. redis服务器版本升级问题

    2023-12-16 04:56:04       34 阅读
  7. 明明随机数

    2023-12-16 04:56:04       43 阅读
  8. react内置组件之<StrictMode></StrictMode>

    2023-12-16 04:56:04       30 阅读