System类
System是Java核心系统类,提供系统级功能和标准IO流。
概述
所在包
java.lang.System
核心特点
- final类,不能继承
- 静态方法和属性,无需创建对象
- 自动导入,无需import
标准IO流
out标准输出流
Java
System.out.println("Hello"); // 输出+换行
System.out.print("Hello"); // 输出不换行
System.out.printf("%d + %d = %d", 1, 2, 3); // 格式化输出
in标准输入流
Java
// 传统方式
InputStream is = System.in;
int ch = is.read(); // 读取一个字节
// Scanner包装
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine(); // 读取一行
int num = scanner.nextInt(); // 读取整数
err标准错误流
Java
System.err.println("Error message"); // 错误输出(红色显示)
err用于输出错误信息,与out分离便于日志处理。
时间获取
currentTimeMillis毫秒时间戳
Java
long timestamp = System.currentTimeMillis();
// 返回1970-01-01 00:00:00 UTC到现在的毫秒数
// 计算程序耗时
long start = System.currentTimeMillis();
// ... 执行代码
long end = System.currentTimeMillis();
long elapsed = end - start; // 耗时毫秒数
nanoTime纳秒时间
Java
long start = System.nanoTime();
// ... 执行代码
long elapsed = System.nanoTime() - start;
// 用于精确计时,不适合获取实际时间
currentTimeMillis获取实际时间戳,nanoTime用于精确计时。
系统属性
getProperty获取属性
Java
// Java版本
String version = System.getProperty("java.version");
// 用户目录
String userDir = System.getProperty("user.dir");
// 用户主目录
String home = System.getProperty("user.home");
// 操作系统名称
String osName = System.getProperty("os.name");
// 文件分隔符
String separator = System.getProperty("file.separator");
常用系统属性
| 属性键 | 说明 |
|---|---|
| java.version | Java版本 |
| java.home | Java安装目录 |
| os.name | 操作系统名称 |
| os.version | 操作系统版本 |
| user.name | 用户名 |
| user.home | 用户主目录 |
| user.dir | 当前工作目录 |
| file.separator | 文件分隔符(/或\) |
| line.separator | 行分隔符(\n或\r\n) |
setProperty设置属性
Java
System.setProperty("my.prop", "value");
String value = System.getProperty("my.prop"); // "value"
getProperties获取所有属性
Java
Properties props = System.getProperties();
props.list(System.out); // 打印所有属性
环境变量
getenv获取环境变量
Java
String path = System.getenv("PATH"); // PATH环境变量
String javaHome = System.getenv("JAVA_HOME"); // JAVA_HOME
数组复制
arraycopy高效复制数组
Java
int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[5];
// 复制src[0-2]到dest[0]
System.arraycopy(src, 0, dest, 0, 3);
// dest = [1, 2, 3, 0, 0]
// 参数:源数组、源起始位置、目标数组、目标起始位置、复制长度
arraycopy是native方法,效率高于循环复制。
程序控制
exit退出程序
Java
System.exit(0); // 正常退出
System.exit(1); // 异常退出(非0表示异常)
exit立即终止程序,finally块不执行(特殊情况)。
identityHashCode原始hashCode
Java
String s1 = new String("Hello");
String s2 = new String("Hello");
s1.hashCode(); // 相同(内容hashCode)
s2.hashCode(); // 相同
System.identityHashCode(s1); // 不同(对象原始hashCode)
System.identityHashCode(s2); // 不同
垃圾回收
gc建议垃圾回收
Java
System.gc(); // 建议JVM执行垃圾回收(不保证立即执行)
gc只是建议,JVM自行决定何时回收,不建议频繁调用。
要点总结
- System是java.lang包的核心系统类
- out/in/err标准输入输出流
- currentTimeMillis获取毫秒时间戳
- nanoTime获取纳秒用于计时
- getProperty获取系统属性
- getenv获取环境变量
- arraycopy高效复制数组
- exit(0)正常退出程序
- identityHashCode获取对象原始hashCode
- gc建议垃圾回收(不保证执行)
📝 发现内容有误?点击此处直接编辑