我相信很多人不满足于调api的人都会去学习JDK源码,我认为只要你用Java做开发,必须要学习JDK源码,JDK是你日常开发的根本,你只有熟读JDK源码,才能更好的理解Java,理解你使用的Java开源工具。以下是我整理出来的阅读JDK源码的方式。
JDK的源码在哪里能找到这个应该能够知道吧,你开发之前都需要安装jdk,你找到jdk目录src.zip,把这个解压出来就是jdk的源代码了,你用idea新建一个项目,把这个放到项目里面就可以进行阅读了。如下图1所示:
图.1
导入了源码就可以开始学习了,包名以 Java 开始的包是 Java 核心包 (Java Core Package) ,包名以 Javax 开始的包是 Java 扩展包 (Java Extension Package) ,例如 javax.swing 包
接下来介绍几个重要的包。
1、java.lang(基础包)
该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等
java.lang.annotation:放置元注解
java.lang.instrment
java.lang.invoke:提供了与Java虚拟机交互的低级原语
java.lang.management:提供提供管理接口,用于监视和管理Java虚拟机以及Java虚拟机在其上运行的操作系统
java.lang.ref:提供了与Java垃圾回收器密切相关的引用类
java.lang.reflect:这个系列使得我们可以通过反射的方式得到对象的属性或者通过反射的方式执行对象的方法
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)
2、java.util(工具包)
java.util.concurrent:并发包
java.util.function:函数式接口
java.util.jar:提供读写 JAR (Java ARchive) 文件格式的类
java.util.logging:提供了强大的日志输出功能
java.util.prefs:此包允许应用程序存储并检索用户和系统首选项和配置数据
java.util.regex:是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包
java.util.spi:java.util 包中类的服务提供者类
java.util.stream:它有助于为各种数据来源上的可能的并行批量操作建立简明的、声明性的表达式
java.util.zip:提供了用于读写标准ZIP和GZIP文件格式的类
3、java.io(阻塞型IO)
该包通过文件系统、数据流和序列化提供系统的输入与输出
4、java.nio (非阻塞型IO)
计算机内存可分为2部分:
- 内核空间,运行OS自带的程序,比如说Windows启动程序、资源管理器、注册表等。
- 用户空间,运行用户程序,比如说微信,浏览器、IDEA等。
java.nio.channels
java.nio.charset
java.nio.file
NIO中的主要类:
- Channel 可以将内核空间中的文件数据映射到用户空间
- Buffer 缓冲,用于批量读写数据
- Charset 字符集,用于字符序列的编码、解码
- Selector 提供非阻塞式的IO
5、java.sql (数据库连接包:实现JDBC的类库)
该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API
JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口,由数据库厂商来实现,并规定了JAVA开发人员访问数据库所使用的方法的调用规范
sql包下面有几个主要的类
DriverManager.java
Statement.java
总结:以上是对JDK源码阅读的总体概括,希望对想学习JDK源码的人有所帮助,下一篇会对java.lang包做详细的分析。