JavaSystem类常用方法说明

System类

位置: java.long.System

无需导包直接使用,System的成员方法都是有static修饰的静态方法所以不用创建对象,可以直接类名.方法名调用

常用方法

方法名 说明
exit(状态码) 终止当前运行的虚拟机
currentTimeMIllis() 返回当前系统的时间毫秒值形式
arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝

方法:exit()

作用

终止当前虚拟机

参数说明:

exit()的参数是状态码,在0127范围内,状态码可以分为两种,一种是**0**,代表程序正常退出,另一种是**非0**数字1127代表异常退出。1~127每一个数字都可以代表一个错误类型,这个错误类型可以自己定义不过推荐使用行业默认。

代码演示

public class System01 {
    public static void main(String[] args) {
        System.out.println("我执行了吗1");
        System.exit(0);
        // 虚拟机已终止
        System.out.println("我执行了吗2");// 并未执行
    }
}

运行结果

我执行了吗1

Process finished with exit code 0

行业常用退出码及含义

退出码 常见含义 简要说明
0 成功退出 程序正常执行完毕 。
1 通用错误 (Catchall) 遇到了一个未分类的、通用的错误,比如“除以零”。
2 误用 Shell 命令 表示命令的使用方式不正确,例如参数错误或缺少必要参数 。
64 命令行使用错误 (EX_USAGE) 与上面的 2 类似,但更具体,表示命令行参数或语法有误 。
65 数据格式错误 (EX_DATAERR) 输入的数据格式有问题,但这指的是用户提供的数据,而非系统文件 。
66 无法打开输入文件 (EX_NOINPUT) 指定的输入文件不存在或无法读取 。
67 用户不存在 (EX_NOUSER) 指定的用户不存在,常用于邮件地址或远程登录场景 。
68 主机未知 (EX_NOHOST) 指定的主机名不存在,常见于网络请求或邮件地址中 。
69 服务不可用 (EX_UNAVAILABLE) 依赖的服务、支持程序或文件不存在 。
70 内部软件错误 (EX_SOFTWARE) 检测到程序内部的逻辑错误 。
71 操作系统错误 (EX_OSERR) 操作系统层面的错误,例如无法创建子进程 (fork) 或管道 (pipe) 。
72 关键系统文件缺失 (EX_OSFILE) 系统文件(如 /etc/passwd)缺失或存在语法错误 。
73 无法创建输出文件 (EX_CANTCREAT) 无法创建用户指定的输出文件 。
74 输入/输出错误 (EX_IOERR) 在读写文件时发生了I/O错误 。
75 临时失败,建议重试 (EX_TEMPFAIL) 发生了临时性的故障,比如无法建立网络连接,可以稍后重试 。
76 远程协议错误 (EX_PROTOCOL) 与远程系统进行协议交换时,收到了“不可能”的响应 。
77 权限不足 (EX_NOPERM) 没有足够的权限执行操作。注意,这通常指文件系统权限之外的更高层级的权限问题 。
78 配置错误 (EX_CONFIG) 发现程序处于未配置或错误配置的状态 。
126 命令无法执行 找到了命令文件,但它没有可执行权限或者不是可执行文件 。
127 命令未找到 找不到指定的命令,通常是 $PATH 路径设置有问题或命令名拼写错误 。

非0退出码使用示例

class ExitCodes {
    public static final int SUCCESS = 0;
    public static final int ERR_CONFIG_NOT_FOUND = 10;
    public static final int ERR_DATABASE_DOWN = 20;
    public static final int ERR_NETWORK_TIMEOUT = 30;
}

// 使用时
if (configFileNotExists) {
    System.exit(ExitCodes.ERR_CONFIG_NOT_FOUND); // 退出码 10
}

说明:将退出码定义为常量可读性强

退出码128~255说明

128~255 是系统在进程被信号(Signal)终止时,自动计算出的退出码(128 + 信号编号)。如果你自己主动 exit(128~255),系统并不会阻止你,但这样做会与系统行为混淆,导致父进程无法区分"程序主动报错"和"程序被信号杀死"。

方法:currentTimeMillis()

作用

返回当前时间与协调世界时 1970-01-01 00:00:00 UTC 之间的时间差(以毫秒为单位测量)。

代码演示

public class System02 {
    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        System.out.println(time);
        // 输出结果 1781588688964
        // 对应时间 2026-06-16 09:44:48 UTC
    }

}

应用

每次调用currentTimeMillis()方法都会根据当前系统时间产生一个时间戳,呢么我们可以在程序开始时生成一个时间戳,程序结束后再生成一个时间戳,两个时间戳的差值就是程序的运行时间单位毫秒。

代码演示

public class System03 {
    public static void main(String[] args) {
        long time1 = System.currentTimeMillis();
        for (int i = 0; i <= 100000; i++) {
            System.out.println(i);
        }
        long time2 = System.currentTimeMillis();
        System.out.println("程序运行时间:" + (time2 - time1) + "ms");
    }

}

运行结果

0
1
2
...
99998
99999
100000
程序运行时间:124ms

Process finished with exit code 0

方法:arraycopy(Object src,

int srcPos,
Object dest,
int destPos,
int length)

作用

从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于 length 参数。
大白话讲就是,从指定数组的指定位置开始复制,复制到目标数组的目标位置,复制length个元素。

参数说明

src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

代码演示

public class System01 {
    public static void main(String[] args) {
        
        // 定义两个数组
        int[] array1 = {0,1,2,3,4,5,6,7,8,9};
        int[] array2 = new int[10];
        
        // 打印数组array1
        System.out.print("array1数组:");
        for(int i=0;i<array1.length;i++){
            System.out.print(array1[i] + " ");
        }
        
        System.out.println();
        
        // 打印复制前的数组array2
        System.out.print("复制前array2数组:");
        for(int i=0;i<array2.length;i++){
            System.out.print(array2[i] + " ");
        }
        
        System.out.println();
        
        // 进行复制
        //复制说明,起始数组array1,起始索引2,目标数组array2,目标索引2,复制长度5
        System.arraycopy(array1,2,array2,2,5);
        
        // 打印复制后的数组array2
        System.out.print("复制后array2数组:");
        for(int i=0;i<array2.length;i++){
            System.out.print(array2[i] + " ");
        }
    }
}

运行结果

array1数组:0 1 2 3 4 5 6 7 8 9 
复制前array2数组:0 0 0 0 0 0 0 0 0 0 
复制后array2数组:0 0 2 3 4 5 6 0 0 0 
Process finished with exit code 0
posted @ 2026-06-16 14:29  ZrYbCu  阅读(2)  评论(0)    收藏  举报