JAR包解析之rt.jar

  • 一、JAR包
  • 二、rt.jar
    • 1、com包
      • 1.1 com.oracle
      • 1.2 com.sun
    • 2、java包
      • 2.1 java.applet
      • 2.2 java.awt
      • 2.3 java.beans
      • 2.4 java.io
      • 2.5 java.lang
      • 2.6 java.math
      • 2.7 java.net
      • 2.8 java.nio
      • 2.9 java.rmi
      • 2.10 java.security
      • 2.11 java.sql
      • 2.12 java.text
      • 2.13 java.time
      • 2.14 java.util
  • 一图总结

一、JAR包

JAR (Java ARchive) 是一种 Java 打包文件格式,它可以 将一组 Java 类文件、相关资源和元数据打包到一个单独的文件中。JAR 文件通常用于分发 Java 应用程序或库,并且可以在不同平台上运行。

JAR 包是一种方便的方式来组织和管理 Java 代码和依赖项,并且可以轻松地与其他开发人员共享和部署代码。JAR 包还支持数字签名和版本控制,以确保代码的完整性和安全性。

进入Java的安装路径下的 jre\lib 目录,就可以看到 JRE环境所依赖的一些JAR包:

二、rt.jar

rt.jar包是JRE环境的核心库之一,包含了Java标准类库中的类和接口,以及Java虚拟机所需的类和接口。rt.jar包通常位于JDK安装目录的lib目录下,是Java程序运行时必需的一个文件。

rt.jar包中包含了大量的Java类,如java.lang.Object、java.lang.String、java.util.List等,这些类提供了Java程序运行所需的基本功能。此外,rt.jar包中还包含了一些Java虚拟机所需的类和接口,如java.lang.Class、java.lang.Thread、java.lang.reflect.Method等,这些类和接口为Java虚拟机的正常运行提供了必要的支持。

在IDE工具中查看rt.jar包的结构,如下图:

1、com包

rt.jar包中的com包提供了一些类和接口,这些类和接口是由不同的开发者和组织提供的。
在IDE工具中查看rt.jar包的com包的结构,如下图:

1.1 com.oracle

在Java 9之前,Java标准库中的一部分实现是由Oracle公司提供的。因此,在rt.jar包中,也包含了一些com.oracle的Java类和接口,这些类和接口提供了一些与Oracle有关的Java实现细节。
需要注意的是,这些com.oracle的API不是Java标准库的一部分,因此也可能存在兼容性和稳定性的问题,不建议直接依赖它们。

以下是一些com.oracle包下的常见类和接口:

  • com.oracle.net:提供了一些网络相关的类,例如SSL/TLS协议的实现;
  • com.oracle.nio:提供了一些NIO相关的类和接口,例如DirectByteBufferPool和ExtendedOpenOption;
  • com.oracle.security:提供了一些安全相关的类和接口,例如OracleUcrypto和PKIUtils;
  • com.oracle.webservices:提供了一些Web服务相关的类和接口,例如WSSecurityContext和AddressingFeature。

需要注意的是,从Java 9开始,Java标准库被重新组织为模块化结构,不再提供rt.jar这样的大型JAR文件。因此,com.oracle包下的一些实现可能已经被移动到其他模块中,或者被删除或修改。

1.2 com.sun

rt.jar包中的com.sun包含了一些Java标准库中的非标准API,这些API通常不被推荐使用,因为它们可能在未来的Java版本中被删除或者修改。com.sun包下的类主要提供了一些底层系统操作和一些Java SE的实现细节,包括但不限于以下内容:

  • com.sun.net 包含了一些网络相关的类,例如HTTP、FTP等协议的实现;
  • com.sun.security 包含了一些安全相关的类,例如证书管理、加密解密等;
  • com.sun.tools 包含了一些Java开发工具相关的类,例如javac编译器、jar打包工具等;
  • com.sun.management 包含了一些JVM管理相关的类,例如JMX接口的实现等。

需要注意的是,由于这些API不属于Java标准库的一部分,因此它们可能在不同的Java实现中存在差异,不同版本之间也可能会有不兼容的情况。因此,在使用这些API时需要格外小心,尽量避免直接依赖它们。

2、java包

rt.jar包中的java包是其中一个根包,包含了大量的Java标准类库。其中包括Java语言的基本类、接口、异常类、注解类、反射类、泛型类等等,以及大量的工具类、集合类、IO类、网络编程类等等。这些类和接口是Java编程中常用的基础类库,可以在Java程序中直接使用。

在IDE工具中查看rt.jar包的 java包的结构,如下图:

2.1 java.applet

rt.jar中的java.applet包包含了Java Applet相关的类和接口。Java Applet是一种在Web浏览器中运行的小型Java程序,它可以动态地加载并运行在Web页面上,通过浏览器与用户交互。Java Applet可以用来创建游戏、动画、图形用户界面、数据可视化等各种Web应用程序。

在java.applet包中,最重要的类是Applet类,它是所有Java Applet的基类。
Applet类提供了一些生命周期方法,如init()、start()、stop()、destroy()等,用于管理Applet的生命周期。此外,Applet类还提供了一些方法,如getDocumentBase()、getCodeBase()、getParameter()等,用于获取Applet的相关信息。

除了Applet类,java.applet包中还包含了一些其他的类和接口,如AppletContext、AppletStub、AudioClip等。这些类和接口提供了一些额外的功能,如在Applet中播放声音、在Applet中创建对话框、在Applet中显示文档等。

总的来说,java.applet包提供了一些非常有用的类和接口,使得开发Java Applet变得更加容易和方便。

2.2 java.awt

rt.jar中的java.awt包是Abstract Window Toolkit(AWT)的核心包,其中包含了Java图形用户界面(GUI)的所有类和接口,提供了一套丰富的GUI组件和布局管理器,使得开发Java GUI应用程序变得更加轻松便捷。

在java.awt包中,最重要的类是Component类,它是所有GUI组件的基类。
Component类提供了一些通用的方法,如setVisible()、setEnabled()、setBounds()等,用于设置和管理GUI组件的属性和行为。
此外,Component类还提供了一些事件处理方法,如addMouseListener()、addKeyListener()等,用于处理用户输入和其他事件。

除了Component类,java.awt包中还包含了一些其他的类和接口,如Container、Window、Dialog、Menu、MenuBar、MenuItem等。
这些类和接口提供了各种GUI组件,如窗口、对话框、菜单、菜单栏、按钮、标签等。
此外,java.awt包还提供了一些布局管理器,如BorderLayout、FlowLayout、GridLayout等,用于管理GUI组件的布局和位置。

2.3 java.beans

java.beans 包提供了一组 API,用于支持 JavaBean 组件体系结构,其中包括用于描述和操作 JavaBean 的类、方法和属性以及处理 JavaBean 事件的类。

在 java.beans 包中,重要的类包括:

  • BeanInfo:用于描述 JavaBean 的元数据信息,包括组件的属性、事件、方法等信息。通过 BeanInfo 可以自定义组件的显示方式、配置方式等;
  • Introspector:用于分析 JavaBean 的类定义和属性定义,生成对应的 BeanInfo;
  • PropertyDescriptor:用于描述 JavaBean 的属性,包括属性的类型、读写方法等信息;
  • EventSetDescriptor:用于描述 JavaBean 的事件,包括事件的类型、参数、监听器等信息;
  • PropertyEditor:用于将 JavaBean 的属性值转换为字符串表示形式,以便在 GUI 界面中编辑显示;
  • PropertyChangeListener:用于监听 JavaBean 的属性变化事件,实现属性值的监听器需要实现该接口。

除了上述类之外,java.beans 包中还包括了大量的工具类和辅助类,用于支持 JavaBean 组件的开发和操作。总的来说,java.beans 包提供了一套完整的 API,用于支持 JavaBean 组件的创建、配置、操作和管理。

2.4 java.io


❗️❗️
java.io包是Java标准库中非常重要的一个包,提供了用于处理输入和输出的类和接口,包括输入流和输出流、文件读写、序列化等功能。

具体来说,java.io包中包含的类和接口有:

  • InputStream和OutputStream:分别是所有输入流和输出流的抽象基类,提供了读写字节流的方法;
  • Reader和Writer:分别是所有字符输入流和输出流的抽象基类,提供了读写字符流的方法;
  • File:表示文件或目录的类;
  • FileInputStream和FileOutputStream:用于读写文件的输入流和输出流;
  • FileReader和FileWriter:用于读写文本文件的输入流和输出流;
  • BufferedReader和BufferedWriter:用于提供缓冲机制的字符输入流和输出流;
  • DataInputStream和DataOutputStream:提供了读写基本数据类型的方法;
  • ObjectInputStream和ObjectOutputStream:用于对象的序列化和反序列化;
  • PipedInputStream和PipedOutputStream:用于在两个线程之间传输字节流数据;
  • PrintWriter和PrintStream:用于格式化输出数据;
  • RandomAccessFile:用于读写文件的随机访问方式。

除此之外,java.io包中还包含了很多其他类和接口,用于处理文件路径、管道通信、压缩文件等操作。可以说,java.io包是Java标准库中非常重要的一个包,几乎所有的Java应用程序都需要用到其中的类和方法。

2.5 java.lang


❗️❗️
在rt.jar中,java.lang包是最重要的包之一,因为它包含了Java语言的基本类和接口。以下是java.lang包中的一些重要类和接口:

  • Object类:是所有Java类的直接或间接父类。它定义了一些通用的方法,例如 equals()、hashCode()和 toString()方法,这些方法可以被所有的Java类继承和使用;
  • Class类:代表了Java程序中的类和接口。它可以用来获取类的信息,例如类名、字段、方法和构造函数等;
  • String类:用于表示字符串。它提供了许多方法来操作字符串,如 substring()、indexOf()和 replace()等;
  • Thread类:用于创建和管理线程。它提供了一些方法来控制线程的状态,如 start()、sleep()和 join()等。
  • Throwable类:用于表示Java程序中的异常。它是所有异常类的直接或间接父类,它提供了一些方法来获取异常信息,例如 getMessage()和 printStackTrace()等;

除了上述类和接口之外,java.lang包还包含了许多其他的类和接口,例如 Number类、Math类、Runnable接口和Comparable接口等。这些类和接口为Java程序员提供了非常重要的基础工具,使得开发Java应用程序变得更加容易和高效。

2.6 java.math

在rt.jar中,java.math包是Java平台提供的用于高精度数学运算的包。它提供了一组类和接口,用于处理大数运算、复数运算等高精度运算

java.math包中最常用的类是BigInteger和BigDecimal,它们都是不可变的任意精度的整数和小数类。

  • BigInteger类提供了对任意精度整数的支持,可以进行基本的算术运算、比较运算、位运算等;
  • BigDecimal类提供了对任意精度小数的支持,可以进行基本的算术运算、比较运算、舍入等。

此外,java.math包中还提供了一些其他的类和接口,如MathContext、RoundingMode等。

  • MathContext类定义了用于BigDecimal运算的上下文精度和舍入模式;
  • RoundingMode定义了BigDecimal运算时的舍入模式。

2.7 java.net


❗️❗️
在rt.jar中,java.net包是Java平台提供的用于网络编程 的包。它提供了一组类和接口,用于实现基于网络通信的应用程序

java.net包中最常用的类是URL和URLConnection,它们用于访问网络上的资源。

  • URL类表示一个统一资源定位符,可以用于访问Web服务器上的资源,也可以用于访问本地文件系统上的文件;
  • URLConnection类用于建立与Web服务器的连接,并从Web服务器上获取数据。

除了URL和URLConnection类,java.net包中还包含了一些其他的类和接口,如Socket、ServerSocket、DatagramPacket、DatagramSocket等。

  • Socket和ServerSocket类用于实现基于TCP协议的通信;
  • DatagramPacket和DatagramSocket类用于实现基于UDP协议的通信。

此外,java.net包中还提供了一些处理网络地址的类和接口,如InetAddress、NetworkInterface等。

  • InetAddress类用于表示一个IP地址;
  • NetworkInterface类用于表示一个网络接口。

总之,java.net包是Java平台提供的用于网络编程的包,它包含了一组类和接口,用于实现基于网络通信的应用程序。其中最常用的是URL和URLConnection类,它们用于访问网络上的资源。此外,还提供了一些处理TCP协议和UDP协议的类和接口,以及处理网络地址的类和接口。

2.8 java.nio

❗️❗️
在rt.jar中,java.nio包是Java平台提供的用于非阻塞I/O操作 的包。它提供了一组类和接口,用于实现高效的I/O操作。

java.nio包中最常用的类是ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer和DoubleBuffer等Buffer类,它们用于处理原始类型数据和字符数据。Buffer类提供了一组方法,用于读写缓冲区中的数据,以及管理缓冲区的容量、位置、限制等属性。

此外,java.nio包中还包含了一些其他的类和接口,如Channel、Selector、FileChannel、MappedByteBuffer等。

  • Channel类用于实现非阻塞I/O操作;
  • Selector类用于实现多路复用I/O操作;
  • FileChannel类用于实现文件I/O操作;
  • MappedByteBuffer类用于实现文件内存映射操作。

java.nio包中还提供了一些用于处理网络I/O的类和接口,如SocketChannel、ServerSocketChannel、DatagramChannel等。

  • SocketChannel和ServerSocketChannel类用于实现基于TCP协议的网络I/O操作;
  • DatagramChannel类用于实现基于UDP协议的网络I/O操作。

总之,java.nio包是Java平台提供的用于非阻塞I/O操作的包,它包含了一组类和接口,用于实现高效的I/O操作。其中最常用的是Buffer类,它提供了一组方法,用于读写缓冲区中的数据。此外,还提供了一些处理文件I/O和网络I/O的类和接口。

2.9 java.rmi

在rt.jar中,java.rmi包是Java平台提供的用于远程方法调用 的包。它提供了一组类和接口,用于实现分布式应用程序的开发

java.rmi包中最常用的类是Remote、RemoteException和Naming等。

  • Remote接口用于标识可远程调用的对象;
  • RemoteException类用于表示远程方法调用时出现的异常;
  • Naming类用于实现基于URL的远程对象查找。

此外,java.rmi包中还包含了一些其他的类和接口,如UnicastRemoteObject、Registry、ServerRef等。

  • UnicastRemoteObject类用于实现单个远程对象的导出;
  • Registry类用于实现远程对象的注册与查找;
  • ServerRef类用于实现远程对象的调用。

java.rmi包中还提供了一些处理序列化和远程传输的类和接口,如RemoteCall、RemoteRef、RemoteStub等。

  • RemoteCall类用于封装远程方法调用所需的参数和返回值;
  • RemoteRef类用于表示远程对象的引用;
  • RemoteStub类用于表示远程对象的代理。

2.10 java.security

在rt.jar中,java.security包是Java平台提供的用于安全编程的包。它提供了一组类和接口,用于实现各种安全功能,如加密、数字签名、密钥管理 等。

java.security包中最常用的类是MessageDigest、Signature、KeyPairGenerator和KeyStore等。

  • MessageDigest类用于实现消息摘要算法,可以计算任意长度的消息的摘要值;
  • Signature类用于实现数字签名算法,可以对任意长度的数据进行数字签名;
  • KeyPairGenerator类用于生成密钥对;
  • KeyStore类用于管理密钥库。

此外,java.security包中还包含了一些其他的类和接口,如SecureRandom、Cipher、KeyAgreement、
KeyFactory等。

  • SecureRandom类用于生成安全的随机数;
  • Cipher类用于实现加密和解密算法;
  • KeyAgreement类用于实现密钥协商算法;
  • KeyFactory类用于将密钥规范转换为密钥对象。

java.security包中还提供了一些处理数字证书和安全策略的类和接口,如Certificate、CertificateFactory、Policy等。

  • Certificate类用于表示数字证书;
  • CertificateFactory类用于实现数字证书的生成和验证
  • Policy类用于实现安全策略的管理。

2.11 java.sql

在rt.jar中,java.sql包是Java平台提供的用于数据库编程 的包。它提供了一组类和接口,用于实现与关系型数据库的连接、查询和更新操作

java.sql包中最常用的类是DriverManager、Connection、Statement、ResultSet等。

  • DriverManager类用于管理数据库驱动程序,可以建立与数据库的连接;
  • Connection类用于表示与数据库的连接,可以执行SQL语句、提交事务等操作;
  • Statement类用于执行SQL语句,可以执行查询、更新等操作;
  • ResultSet类用于表示查询结果集,可以遍历查询结果、获取数据等操作。

此外,java.sql包中还包含了一些其他的类和接口,如PreparedStatement、CallableStatement、DatabaseMetaData等。

  • PreparedStatement类用于执行预编译的SQL语句,可以提高执行效率;
  • CallableStatement类用于执行存储过程,可以传递参数、获取结果等操作;
  • DatabaseMetaData类用于获取数据库的元数据信息,如表、字段等信息。

java.sql包中还提供了一些处理事务和连接池的类和接口,如Savepoint、Transaction、DataSource等。

  • Savepoint类用于设置事务的保存点,可以实现事务回滚到指定的保存点;
  • Transaction接口用于表示事务,可以提交、回滚事务等操作;
  • DataSource类用于实现连接池,可以提高连接的重用性和效率。

总之,java.sql包是Java平台提供的用于数据库编程的包,它包含了一组类和接口,用于实现与关系型数据库的连接、查询和更新操作。其中最常用的是DriverManager、Connection、Statement、ResultSet等类,它们用于实现数据库操作。此外,还提供了一些处理事务和连接池的类和接口。

2.12 java.text

java.text包,提供了处理文本、日期和数字方面的类和方法。

java.text包中的类包括:

  • DateFormat:用于格式化和解析日期和时间;
  • NumberFormat:用于格式化和解析数字;
  • MessageFormat:用于格式化复杂的消息,包括多个参数和复数形式;
  • SimpleDateFormat:是DateFormat的子类,用于处理简单的日期和时间格式;
  • ChoiceFormat:用于将数字映射到不同的字符串形式;
  • DecimalFormat:是NumberFormat的子类,用于处理数字格式。

此外,java.text包还提供了一些辅助类,用于处理字符集、排序和字符串操作等方面的问题。

2.13 java.time

Java 8引入了全新的日期和时间API,其中包含了java.time包,用于处理日期、时间、时区、持续时间等 方面的功能。

java.time包中的类包括:

  • LocalDate:表示日期,包括年月日;
  • LocalTime:表示时间,包括小时、分钟、秒、纳秒;
  • LocalDateTime:表示日期和时间,包括年月日、小时、分钟、秒、纳秒;
  • ZonedDateTime:表示带时区的日期和时间;
  • Duration:表示持续时间;
  • Period:表示时间段,通常用于表示两个日期之间的时间差;
  • Instant:表示时间轴上的瞬时点,可以精确到纳秒级别;
  • DateTimeFormatter:用于格式化和解析日期和时间;
  • ZoneId和ZoneOffset:用于处理时区。

此外,java.time包还提供了一些辅助类,用于处理日期、时间、时区和持续时间等方面的问题。

2.14 java.util


❗️❗️

java.util包是其中的一个核心包,提供了实用工具类、容器类、日期类、随机数生成器类等等。

java.util包中的类包括:

  • Collection、Map:用于存储和操作对象的容器类;
  • ArrayList、LinkedList、HashSet等:Collection和Map的具体实现类;
  • Arrays:用于操作数组的工具类;
  • Calendar、Date:用于表示日期和时间的类;
  • Random:用于生成随机数的类;
  • Timer、TimerTask:用于定时器任务的类;
  • Properties:用于读写属性文件的类;
  • StringTokenizer和Scanner:用于处理字符串的类;
  • UUID:用于生成唯一标识符的类。

此外,java.util包还提供了一些辅助类,用于处理日期、时间、随机数、集合、排序等方面的问题。

一图总结