java.lang.System 类是 Java 中用于处理系统级操作的工具类,它封装了一系列与系统交互的静态方法,涵盖虚拟机控制、时间获取、数组拷贝等核心功能。本文结合实例,解析 System 类的常用方法及应用场景。
一、System 类的基础特性
1. 工具类的定位
System 类被设计为系统级工具类,其特点包括:
构造方法私有(private),无法创建实例,所有方法均为静态方法(static)直接通过 System.方法名() 调用,无需实例化核心作用:提供与底层系统交互的接口,简化系统级操作
二、核心方法解析
1. exit(int status):终止虚拟机运行
功能:强制终止当前 Java 虚拟机(JVM),status 为退出状态码(0 表示正常退出,非 0 表示异常退出)。特点:调用后虚拟机立即停止,后续代码不再执行。
// System.exit(0); // 取消注释后,后续"我执行了吗?"不会输出
System.out.println("我执行了吗?");
2. currentTimeMillis():获取系统时间毫秒数
功能:返回从「1970 年 1 月 1 日 0 时 0 分 0 秒」(计算机时间原点)到当前时刻的毫秒数,常用于计时或生成时间戳。应用场景:计算代码执行耗时、生成唯一 ID 等。
long time = System.currentTimeMillis();
System.out.println(time); // 输出:1754965367635(示例值)
示例:计算循环执行时间
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
// 执行耗时操作
}
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start) + "毫秒");
3. arraycopy():高效数组拷贝
功能:将一个数组的指定范围元素拷贝到另一个数组,是 Java 中性能最优的数组拷贝方法之一。
方法签名:
public static void arraycopy(
Object src, // 源数组
int srcPos, // 源数组起始拷贝索引
Object dest, // 目标数组
int destPos, // 目标数组起始存放索引
int length // 拷贝元素个数
)
使用示例:
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[arr1.length];
// 将 arr1 从索引0开始的5个元素,拷贝到 arr2 索引0位置
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
System.out.println(Arrays.toString(arr2)); // 输出:[1, 2, 3, 4, 5]
注意事项:
基本数据类型数组拷贝时,源数组与目标数组类型必须一致(如 int[] 不能拷贝到 long[])。引用数据类型数组拷贝时,支持子类类型数组拷贝到父类类型数组(如 String[] 拷贝到 Object[])。起始索引和拷贝个数不能超出数组长度,否则会抛出 ArrayIndexOutOfBoundsException。
三、System 类与 Runtime 类的区别
方法功能System 类Runtime 类终止虚拟机System.exit(int status)Runtime.exit(int status)获取系统时间currentTimeMillis() (静态方法)无直接对应方法数组拷贝arraycopy() (静态方法)无此功能执行系统命令无此功能exec(String command) (实例方法)内存 / CPU 信息无直接对应方法maxMemory()、availableProcessors() 等
四、总结
System 类是 Java 中处理系统级操作的核心工具,其核心价值在于:
便捷的系统控制:通过 exit() 快速终止虚拟机,简化程序退出逻辑。高效的时间管理:currentTimeMillis() 提供精准的时间戳,满足计时、日志等场景需求。高性能数组操作:arraycopy() 底层由 native 方法实现,拷贝效率远高于手动循环拷贝。
在实际开发中,System 类的方法频繁用于日常编程(如数组处理、性能测试),掌握其用法能显著提升代码效率和简洁性,是 Java 开发者必备的基础工具类知识。