OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法

深入解析Java.util.Arrays工具类
本文详细解读了Java.util.Arrays这一针对数组操作的工具类,包括其复用的工具方法、禁止实例化的特性、统一管理相关代码的原则、针对不同数据类型的处理方式以及函数组织方式。通过引用OpenJDK源码和API文档,文章提供了深入的技术剖析。

本篇主要讲解java.util.Arrays这个针对数组的工具类。

1.可复用的工具类和方法。
  这个工具类里,包含很多针对数组的工具方法,如

  排序、交换、二分查找、比较、填充、复制、hashcode、toString等。

2.禁止默认构造函数,防止实例化。
    private Arrays() {
    }
   这个类只包含了一些静态的工具方法,实例化没有任何意义。

  更严格一点,还可以将类定义为 public final Arrays。

3.把针对数组的工具方法,统一放到一个工具类中,方便管理。

  public static void sort(int[] a);

  public static int binarySearch(long[] a, int fromIndex, int toIndex, long key);

  public static int hashCode(int a[]);

  每一个工具方法处理的对象都是数组。

  即根据“数组”这个维度来把相关代码放在一起的。

  类似的,我们也可以根据“数据类型”来组织工具代码,如针对String类型的工具类放在StringUtils里,Integer类型的工具类放在IntegerUtils里。

  具体如何组织,结合实际情况需要。

4.针对不同数据类型的。

   public static void sort(int[] a);

   public static void sort(long[] a);

   public static void sort(float[] a);

   同样是排序这个功能,既有处理整型数组int[],也有长整型数组long[],还有float[]等。

5.函数的组织方式。

  功能相同的方法依次排列。

  排序函数sort相关的放一起。

  搜索函数binarySearch、比较函数equals、填充函数fill、拷贝函数copyOf、计算hashcode的hashCode、转化为字符串的toString等都依次把相关的代码组织在一起。

 类似的工具类还有java.util.Collections等,最大的区别是Collections的主要是针对List、Set、Collection等集合的。

Arrays类结构的截图

 Arrays-Sort

Arrays-Equals

参考资料: OpenJDK源码,JDK中文API文档

相关阅读

OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常

OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)

OpenJDK源码研究笔记(三)-RandomAccess等标记接口的作用

原文参见http://FansUnion.cn/articles/2831

### OpenJDK 21 JRE与OpenJDK 21 JRE Headless的区别 OpenJDK 21 JRE(Java Runtime Environment) OpenJDK 21 JRE Headless 是两个不同的运行时环境配置,主要区别在于对图形用户界面(GUI)的支持以及相关依赖的包含情况。 #### 图形支持 - **OpenJDK 21 JRE** 包含了完整的 Java 运行时环境,支持图形用户界面(GUI)相关的功能。这意味着它能够运行需要显示设备、键盘鼠标的应用程序[^3]。 - **OpenJDK 21 JRE Headless** 则是一个轻量级版本,专为无头(headless)环境设计。无头模式下,系统不需要显示设备、键盘或鼠标即可运行。因此,Headless 版本移除了所有与 GUI 相关的功能依赖项[^3]。 #### 文件大小 由于 OpenJDK 21 JRE Headless 去掉了与图形相关的库依赖,它的文件大小通常比完整的 JRE 更小。这种差异类似于 OpenJDK 8 OpenJDK 11 中观察到的现象[^1]。在某些情况下,完整版 JRE 的体积可能显著大于 Headless 版本。 #### 应用场景 - **OpenJDK 21 JRE** 适用于需要使用 AWT、Swing 或其他图形库的应用程序。例如,桌面应用程序或需要屏幕渲染的服务。 - **OpenJDK 21 JRE Headless** 更适合运行在服务器或嵌入式设备上,这些环境通常不提供图形界面。例如,用于执行批处理任务、Web 服务或后台计算的应用程序[^3]。 #### 示例代码 以下是一个简单的示例,展示如何检测当前环境是否处于无头模式: ```java public class HeadlessCheck { public static void main(String[] args) { boolean isHeadless = java.awt.GraphicsEnvironment.isHeadless(); System.out.println("Is this environment headless? " + isHeadless); } } ``` #### 依赖关系 在安装过程中,OpenJDK 21 JRE 可能会引入更多与图形相关的依赖包,如 `libxt-dev` 等[^2]。而 OpenJDK 21 JRE Headless 则避免了这些额外的依赖,从而减少了系统的复杂性资源消耗。 --- ###
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值