资讯详情

JDK源码阅读-搭建阅读环境

1.找到源码位置

我们实际上安装了它jdk当源码存在时,只要找到jdk如果不知道安装位置,可以找到源代码。jdk具体安装位置可在idea中查看。 在这里插入图片描述

打开目录,在路径下找到它src.zip,这就是jdk的源码了

2.导入源码

在当地新建一个java项目,然后将src解压直接复制到新项目录下(PS:不要直接在idea复制中间操作,否则会很慢很卡)。 如果将代码复制到项目中,还有另一个问题src在下面的包下,启动时会发现各种异常,需要长时间调试。如果文件直接复制到项目录下,就不会出现这些问题。

3.调试源码

在项目中随意创建测试类,然后打断调试点。在这里,我随便写了一个list集合。

public class Test1 { 
             public static void main(String[] args) { 
                 List<Integer> list = new ArrayList();         list.add(1);         list.add(2);         list.add(3);     } } 

在中断点调试过程中,我们发现没有办法进入源代码的内部。我们需要设置它并找到它setting下的debugger的stepping,关闭不进入源代码的内部,保存后启动调试,然后进入源代码内部**(PS:设置全局,其他项目也是如此,切割项目时记得重新选择)**。

如果要在源码中加注释,现在不能加注释,需要jdk将源代码改为我们自己的源代码。 重新打开File-Project Structure-SDKS,用我们自己的解压地址替换源码,也可以新建一个jdk修改,新建项目使用的修改jdk(这里的修改也是全局)。

4.源码重点

此时可修改源码内容,加注释,导入源码即可开始学习,jdk中只有java目录看目录下的源代码,但是java还有很多类包,我们可以先看看关键内容。

4.1、java.lang(基础包)

该包提供了Java例如,编程的基本类别 Object、Math、String、StringBuffer、System、Thread等

java.lang.instrment:服务监控(不需要看)

java.lang.invoke:提供了与Java虚拟机交互的低级原语(不需要看)

java.lang.management:为监控和管理提供管理界面Java虚拟机以及Java虚拟机在其上运行的操作系统(不需要看)

java.lang.ref:提供了与Java与垃圾回收器密切相关的引用类(不需要看)

lang包称为 java 由编译器自动引入的语言包。不需要在程序中使用 import 可以使用语句。它所包含的类别和界面对所有实际情况都是如此。 Java 程序是必要的。

  • object 类
  • 包装类8种基本元素(Integer,Long,Short,Byte,Double,Float,Char,Boolean)
  • 字符串类 (String 类和 StringBuffer ,StringBuilder)
  • 数学类 (Math)
  • 线程类(Thread,Runnable)
  • 系统及运行 (System 类和 Runtime 类 )
  • 错误和异常处理 (Throwable 、 Exception 、 Error)
  • 过程类 (process)

4.2、java.util(工具包)

模块(需要看)

java.util.jar:提供读写 JAR (Java ARchive) 文件格式类

java.util.logging:日志输出功能强大

java.util.prefs:该包允许应用程序存储和检索用户和系统的首选和配置数据

java.util.regex:是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包

java.util.spi:java.util 包中类服务提供者

java.util.zip:提供读写标准ZIP和GZIP文件格式类

4.3、java.io(阻塞型IO)

该包通过文件系统、数据流和序列化提供系统的输入和输出

4.4、java.nio (非阻塞型IO)

计算机存可分为2部分:

内核空间,运行OS自带的程序,比如说Windows启动程序、资源管理器、注册表等。
用户空间,运行用户程序,比如说微信,浏览器、IDEA等。

java.nio.channels

java.nio.charset

java.nio.file

NIO中的主要类:

Channel    可以将内核空间中的文件数据映射到用户空间
Buffer  缓冲,用于批量读写数据
Charset  字符集,用于字符序列的编码、解码
Selector  提供非阻塞式的IO

4.5、java.math(计算类)

提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。

BigInteger 除提供任意精度之外,它类似于 Java 的基本整数类型,因此在 BigInteger 上执行的操作不产生溢出,也不会丢失精度。除标准算法操作外,BigInteger 还提供模 (modular) 算法、GCD 计算、基本 (primality) 测试、素数生成、位处理以及一些其他操作。 BigDecimal 提供适用于货币计算和类似计算的任意精度的有符号十进制数字。BigDecimal 允许用户对舍入行为进行完全控制,并允许用户选择所有八个舍入模式。

4.6、java.time(时间类)

jdk8引入了时间类,功能强大,将日期和时间分开来。

由于老版本对于日期的计算比较困难以及api线程不安全,jdk1.8之前没有枚举类,字段中整数常量导致常量都是可变的。 为了处理 实际开发中遇到的问题,标准库随后引入了java.sql.Date作为java.util.Date的子类,但是还是没能彻底解决问题。最终JavaSE 8中引入了java.time包。

4.7、java.net(提供实现网络应用程序的类)

java.net包可以大致分为两部分:

  • 低级API ,处理以下抽象:

    • 地址 ,网络标识符,如IP地址。
    • 套接字 ,是基本的双向数据通信机制。
    • 接口 ,描述网络接口。
  • 高级API ,处理以下抽象:

    • URI ,表示通用资源标识符。
    • URL ,代表统一资源定位器。
    • Connections ,表示URL指向的资源的连接。

标签: 模块式连接器modular

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台