从源码开始学习Java

为什么要从源码开始学习

作为一名Java程序员,如果没有认真学习JDK源码,那你可能连初级小白都算不上。当我们在开发过程中遇到各种各样的问题时,我们更需要从开发文档中寻找解决办法,而不是直接百度,一步到位找答案,这样只是解决了眼前的问题,而没有真正领会问题所在,也做不到举一反三。通过对源码的熟悉,我们能进一步领会Java语言的底层设计,这对于将来学习各种各样的框架来说是十分重要的。因此,一名Java程序员的进阶之路就是从源码学习开始的。

开发文档

我们将以JDK8为例进行介绍。开发文档在:JDK8-APIDocs.

java包、javax包、org包

java.*(Java标准库,最基础的库)
java SE的标准库,是java标准的一部分,是对外承诺的java开发接口,通常要保持向后兼容,一般不会轻易修改。包括其他厂家的在内,所有jdk的实现,在java.*上都是一样的。

javax.*(Java标准扩展库,扩展库)
也是java标准的一部分,但是没有包含在标准库中,一般属于标准库的扩展。通常属于某个特定领域,不是一般性的api。

org.*(Java其他扩展库,非官方提供)
是由企业或者组织提供的java类库,大部分不是sun公司提供的,不具备向后兼容性,会根据需要随时增减。其中比较常用的是w3c提供的对XML、网页、服务器的类和接口。

介绍java包

java.applet(提供创建applet所需的类以及applet用于与其applet上下文进行通信的类。)
java.awt(包含用于创建用户界面和绘制图形和图像的所有类。)
——java.awt.color(提供颜色空间的类。)
——java.awt.datatransfer(提供用于在应用程序之间和之间传输数据的接口和类。)
——java.awt.dnd(拖放是在许多图形用户界面系统中发现的直接操纵手势,它提供了一种在逻辑上与GUI中的表示元素相关联的实体之间传递信息的机制。)
——java.awt.event(提供用于处理AWT组件触发的不同类型事件的接口和类。)
——java.awt.font(提供与字体相关的类和界面。)
——java.awt.geom(提供用于定义和执行与二维几何相关的对象的操作的Java 2D类。)
——-java.awt.im(为输入法框架提供类和接口。)
——java.awt.im.spi(提供可以开发可以与任何Java运行时环境一起使用的输入法的接口。)
——java.awt.image(提供创建和修改图像的类。)
——java.awt.image.renderable(提供用于生成与渲染无关的图像的类和接口。)
——java.awt.print(提供通用打印API的类和接口。)
java.beans(包含与开发 bean相关的类 - 基于JavaBeans架构的组件。)
——java.beans.beancontext(提供与bean上下文相关的类和接口。)
-java.io(通过数据流,序列化和文件系统提供系统输入和输出。)
java.lang(提供对Java编程语言设计至关重要的类。)
——java.lang.annotation(为Java编程语言注释工具提供库支持。)
——java.lang.instrument(提供允许Java编程语言代理仪器在JVM上运行程序的服务。)
——java.lang.invoke(包含由Java核心类库和虚拟机直接提供的动态语言支持。)
——java.lang.management(提供用于监视和管理Java虚拟机和Java运行时中其他组件的管理界面。)
——java.lang.ref(提供参考对象类,它支持与垃圾收集器的有限度的交互。)
——java.lang.reflect(提供用于获取关于类和对象的反射信息的类和接口。)
java.math(提供执行任意精度整数运算( BigInteger )和任意精度十进制运算( BigDecimal )的类。)
-java.net(提供实现网络应用程序的类。)
java.nio(定义缓冲区,它们是数据容器,并提供其他NIO包的概述。)
——java.nio.channels(定义通道,其表示与能够执行I / O操作的实体的连接,例如文件和套接字; 定义选择器,用于多路复用,非阻塞I / O操作。)
——java.nio.channels.spi(java.nio.channels包的服务提供商类。)
——java.nio.charset(定义字符集,解码器和编码器,用于在字节和Unicode字符之间进行转换。)
——java.nio.chartset.spi(java.nio.charset包的服务提供者类。)
——java.nio.file(定义Java虚拟机访问文件,文件属性和文件系统的接口和类。)
——java.nio.file.attribute(提供访问文件和文件系统属性的接口和类。)
——java.nio.file.spi(java.nio.file包的服务提供者类。)
java.rmi(提供RMI包。)
RMI是远程方法调用。 这是一种使一个Java虚拟机上的对象能够调用另一个Java虚拟机中对象的方法的机制。
——java.rmi.activation(提供对RMI对象激活的支持。)
——java.rmi.dgc(提供RMI分布式垃圾回收(DGC)的类和接口。)
——java.rmi.registry(为RMI注册表提供一个类和两个接口。)
——java.rmi.server(提供用于支持RMI服务器端的类和接口。)
java.security(提供安全框架的类和接口。)
——java.security.cert(提供用于解析和管理证书,证书撤销列表(CRL)和认证路径的类和接口。)
——java.aecurity.interfaces(提供用于生成RSA实验室技术说明PKCS#1中定义的RSA(Rivest,Shamir和Adleman非对称密码算法)密钥以及NIST FIPS-186中定义的DSA(数字签名算法)密钥的接口。)
——java.security.spec(提供关键规范和算法参数规范的类和接口。)
java.sql(提供使用Java语言访问和处理存储在数据源(通常是关系数据库)中的数据的API。)
java.text(提供用于以独立于自然语言的方式处理文本,日期,数字和消息的类和接口。)
——java.text.spi(java.text包中类的服务提供者类。)
java.time(日期,时间,瞬间和持续时间的主要API。)
——java.time.chrono(除默认ISO之外的日历系统的通用API。)
——java.time.format(提供打印和解析日期和时间的类。)
——java.time.temporal(使用字段和单位访问日期和时间,以及日期时间调整器。)
——java.time.zone(支持时区及其规则。)
java.util(包含集合框架,旧集合类,事件模型,日期和时间设施,国际化和其他实用程序类(字符串tokenizer,随机数生成器和位数组)。)
——java.util.concurrent(实用程序类通常在并发编程中很有用。)
——java.util.concurrent.atomic(一个小型工具包,支持单个变量上的无锁线程安全编程。)
——java.util.concurrent.locks(接口和类提供了一个框架,用于锁定和等待与内置同步和监视器不同的条件。)
——java.util.function(功能界面提供了lambda表达式和方法引用的目标类型。)
——java.util.jar(提供用于读取和写入JAR(Java ARchive)文件格式的类,该文件格式基于具有可选清单文件的标准ZIP文件格式。)
——java.util.logging(提供Java平台核心日志记录工具的类和接口。)
——java.util.prefs(该软件包允许应用程序存储和检索用户和系统首选项和配置数据。)
——java.util.regex(匹配字符序列与正则表达式指定的模式的类。)
——java.util.spi(java.util包中类的服务提供者类。)
——java.util.stream(支持元素流功能性操作的类,例如集合上的map-reduce转换。)
——java.util.zip(提供读写标准ZIP和GZIP文件格式的类。)

介绍javax包

javax.accessibility(定义用户界面组件与提供对这些组件的访问的辅助技术之间的合同。)
javax.activation
javax.activity(包含ORB机械在解组时抛出的活动服务相关异常。)
javax.annotation(定义用户界面组件与提供对这些组件的访问的辅助技术之间的合同。)
——javax.annotation.processing(用于声明注释处理器和允许注释处理器与注释处理工具环境通信的设施。)
javax.crypto(提供加密操作的类和接口。)
——javax.crypto.interfaces(提供RSA实验室PKCS#3中定义的Diffie-Hellman密钥的接口。)
——javax.crypto.spec(提供关键规范和算法参数规范的类和接口。)
javax.imageio(Java Image I / O API的主要包。)
——javax.imageio.event(一组Java Image I / O API,用于在图像读取和写入期间同步通知事件。)
——javax.imageio.metadata(处理读写元数据的Java Image I / O API的一个包。)
——javax.imageio.plugins.bmp(包含内置BMP插件使用的公共类的软件包。)
——javax.imageio.plugins.jpeg(支持内置JPEG插件的类。)
javax.jws
——javax.jws.soap
javax.lang.model(用于建模Java编程语言的软件包的类和层次结构。)
——javax.lang.model.element(用于建模Java编程语言元素的接口。)
——javax.lang.model.type(用于建模Java编程语言类型的接口。)
——javax.lang.model.util(协助处理 program elements和 types的公用事业 。)
javax.management(提供Java管理扩展的核心类。)
——javax.management.loading(提供实现高级动态加载的类。)
——javax.management.modelmbean(提供ModelMBean类的定义。)
——javax.management.monitor(提供监视器类的定义。)
——javax.management.openmbean(提供打开的数据类型和Open MBean描述符类。)
——javax.management.relation(提供关系服务的定义。)
——javax.management.remote(用于远程访问JMX MBean服务器的接口。)
——javax.management.remote.rmi(RMI连接器是JMX Remote API的连接器,它使用RMI将客户端请求传输到远程MBean服务器。)
——javax.management.timer(提供定时器MBean的定义。)
javax.naming(提供用于访问命名服务的类和接口。)
——javax.naming.directory(扩展 javax.naming包以提供访问目录服务的功能。)
——javax.naming.event( 访问命名和目录服务时,提供对事件通知的支持。)
——javax.naming.ldap(提供对LDAPv3扩展操作和控件的支持。)
——javax.naming.spi
-javax.net(提供网络应用程序的类。)
——javax.net.ssl(为安全套接字包提供类。)
javax.print(提供Java平台Print Service API的主要类和接口。)
——javax.print.attribute(提供描述Java TM打印服务属性类型以及如何将其集合到属性集中的类和接口。)
——javax.print.attribute.standard(包javax.print.attribute.standard包含特定打印属性的类。)
——javax.print.event(程序包javax.print.event包含事件类和侦听器接口。)
javax.rmi(包含RMI-IIOP的用户API。)
——javax.rmi.CORBA(包含RMI-IIOP的可移植API。)
——javax.rmi.ssl(提供了实现RMIClientSocketFactory和RMIServerSocketFactory通过安全套接字层(SSL)或传输层安全(TLS)协议。)
javax.script(脚本API由定义Java脚本引擎的接口和类组成,并为Java 应用程序中的使用提供了一个框架。)
javax.security
——javax.security.auth(此软件包提供了认证和授权的框架。)
——javax.security.auth.callback(该包提供了服务与应用程序交互所需的类,以便检索信息(例如,包括用户名或密码的身份验证数据)或显示信息(例如错误和警告消息)。)
——javax.security.auth.kerberos(此包包含与Kerberos网络身份验证协议相关的实用程序类。)
——javax.security.auth.login(该包提供了一个可插拔的认证框架。)
——javax.security.auth.spi(该包提供了用于实现可插拔认证模块的接口。)
——javax.security.auth.x500(该包包含用于在 主题中存储X500 Principal和X500 Private Credentials的 类 。)
——javax.security.cert(提供公钥证书类。)
——javax.security.sasl(包含用于支持SASL的类和接口。)
javax.sound
——javax.sound.midi(提供MIDI(乐器数字接口)数据的I / O,排序和综合的接口和类。)
——javax.sound.midi.spi(为服务提供商提供了提供新的MIDI设备,MIDI文件读取器和写入器或声卡读取器的接口。)
——javax.sound.sampled(提供用于捕获,处理和播放采样音频数据的接口和类。)
——javax.sound.sampled.spi(为服务提供商提供抽象类,以提供新的音频设备,声音文件读取器和写入器或音频格式转换器。)
javax.sql(为Java编程语言提供服务器端数据源访问和处理API。)
——javax.sql.rowset(JDBC RowSet实现的标准接口和基类。)
——javax.sql.rowset.serial(提供实用程序类以允许Java编程语言中的SQL类型和数据类型之间的可序列化映射。)
——javax.sql.spi(第三方供应商在实施同步提供程序时必须使用的标准类和接口。)
javax.swing(为Java编程语言提供服务器端数据源访问和处理API。)
——javax.swing.border(提供用于绘制Swing组件周围特殊边框的类和接口。)
——javax.swing.colorchooser(包含由所使用的类和接口 JColorChooser组件。)
——javax.swing.event(提供Swing组件触发的事件。)
——javax.swing.filechooser(包含由所使用的类和接口 JFileChooser组件。)
——javax.swing.plaf(提供一个接口和许多抽象类,Swing用来提供其可插拔的外观和感觉功能。)
——javax.swing.plaf.basic(提供根据“基本”外观构建的用户界面对象。)
——javax.swing.plaf.metal(提供根据Java外观构建的用户界面对象(一旦代号为 Metal ),这是默认的外观和感觉。)
——javax.swing.plaf.multi(提供组合两种或多种外观和感觉的用户界面对象。)
——javax.swing.plaf.nimbus(提供根据跨平台Nimbus外观构建的用户界面对象。)
——javax.swing.plaf.synth(合成是一种可以让所有绘画委托的外观和感觉。)
——javax.swing.table(提供处理 javax.swing.JTable类和 javax.swing.JTable 。)
——javax.swing.text(提供处理可编辑和不可编辑文本组件的类和接口。)
——javax.swing.text.html(提供类别 HTMLEditorKit和支持类创建HTML文本编辑器。)
——javax.swing.text.html.parser(提供默认的HTML解析器以及支持类。)
——javax.swing.text.rtf(提供用于创建Rich-Text-Format文本编辑器的类( RTFEditorKit )。)
——javax.swing.tree(提供处理 javax.swing.JTree类和 javax.swing.JTree 。)
——javax.swing.undo(允许开发人员在文本编辑器等应用程序中提供撤消/重做的支持。)
javax.tools(为可以从程序调用的工具提供接口,例如编译器。)
javax.transaction(包含ORB机械在解组期间抛出的三个异常。)
——javax.transaction.xa(提供定义事务管理器和资源管理器之间的契约的API,这允许事务管理器在JTA事务中引用和删除资源对象(由资源管理器驱动程序提供)。)
javax.xml
——javax.xml.bind(为客户端应用程序提供运行时绑定框架,包括解组,编组和验证功能。)
——javax.xml.bind.annotation(定义用于将Java程序元素定制到XML模式映射的注释。)
——javax.xml.bind.annotation.adapters(XmlAdapter及其指定的子类允许任意Java类与JAXB一起使用。)
——javax.xml.bind.attachment( 该包由基于MIME的包处理器实现,可以在基于MIME的包格式中解释和创建优化的二进制数据。)
——javax.xml.bind.helpers(仅限JAXB提供程序使用:为某些 javax.xml.bind接口提供部分默认实现。)
——javax.xml.bind.util(有用的客户端实用程序类。)
——javax.xml.crypto(XML加密的通用类。)
——javax.xml.crypto.dom(针对 javax.xml.crypto包的DOM特定类。)
——javax.xml.crypto.dsig(用于生成和验证XML数字签名的类。)
——javax.xml.crypto.dsig.dom(适用于 javax.xml.crypto.dsig包的DOM特定类。)
——javax.xml.crypto.dsig.keyinfo(用于解析和处理KeyInfo元素和结构的类。)
——javax.xml.crypto.dsig.spec(XML数字签名的参数类。)
——javax.xml.datatype(XML / Java类型映射。)
——javax.xml.namespace(XML命名空间处理。)
——javax.xml.parsers(提供允许处理XML文档的类。)
——javax.xml.soap(提供用于创建和构建SOAP消息的API。)
——javax.xml.stream
——javax.xml.stream.events
——javax.xml.stream.util
——javax.xml.transform(该包定义了用于处理转换指令的通用API,并执行从源到结果的转换。)
——javax.xml.transform.dom(该包实现DOM特定的转换API。)
——javax.xml.transform.sax(该软件包实现了特定于SAX2的转换API。)
——javax.xml.transform.stax(提供特定于StAX的转换API。)
——javax.xml.transform.stream(该包实现流和URI特定的转换API。)
——javax.xml.validation(此软件包提供了一个用于验证XML文档的API。)
——-javax.xml.ws(此软件包包含核心JAX-WS API。)
——javax.xml.ws.handler(此包定义消息处理程序的API。)
——javax.xml.ws.handler.soap(此包定义SOAP消息处理程序的API。)
——javax.xml.ws.http(该包定义了特定于HTTP绑定的API。)
——javax.xml.ws.soap(该包定义了SOAP绑定专用的API。)
——javax.xml.ws.spi(允此套件为JAX-WS定义了SPI。)
——javax.xml.ws.spi.http(提供HTTP SPI,用于在容器中轻松部署JAX-WS Web服务。)
——javax.xml.ws.wsaddressing(此包定义与WS-Addressing相关的API。)
——javax.xml.xpath(该包提供了一个 对象模型中立的 API,用于评估XPath表达式和访问评估环境。)

以上内容就是对jdk8源码中各包的一个简单的介绍,我们不需要对每一个都熟悉,但基本的一些还是需要刨根问底,深入学习的,今后还会继续更新的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值