【java】System类详解

Java 基础核心类:System 类详解(常见用法 + 使用场景 + 面试高频)


在 Java 开发中,System 类几乎每天都会使用,例如:

java 复制代码
System.out.println("Hello World");

但很多人只知道 println,却忽略了 System 类其实提供了大量 与 JVM、操作系统、IO、时间、环境变量相关的核心能力

本文将从 基础 → 常用方法 → 实际场景 → 面试考点 ,系统讲解 System 类。


一、System 类是什么?

System 位于:

java 复制代码
java.lang.System

特点:

  • 属于 Java 核心类库
  • 自动导入(无需 import)
  • 所有成员基本都是 static
  • 不能实例化

源码中有一段非常经典的定义:

java 复制代码
public final class System {
    private System() {}
}

说明:

  • final:不能被继承
  • private 构造方法:不能创建对象

所以我们使用时都是:

java 复制代码
System.xxx

二、System 最常见的功能:标准输出

这是最常见的用法。

java 复制代码
System.out.println("Hello");
System.out.print("Java");

out 是什么?

java 复制代码
public static final PrintStream out

也就是说:

System.out 本质是一个 PrintStream(打印流)对象

所以可以调用:

java 复制代码
System.out.print()
System.out.println()
System.out.printf()

示例:

java 复制代码
System.out.printf("name=%s age=%d", "Tom", 20);

输出:

复制代码
name=Tom age=20

三、System.in:标准输入

System.in 用于 读取控制台输入

类型:

java 复制代码
public static final InputStream in

常见用法是配合 Scanner

java 复制代码
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println(name);

示例:

java 复制代码
Scanner scanner = new Scanner(System.in);

System.out.print("请输入姓名:");
String name = scanner.nextLine();

System.out.println("Hello " + name);

运行:

复制代码
请输入姓名:Tom
Hello Tom

四、System.err:错误输出流

System.err标准错误输出流

java 复制代码
System.err.println("Error occurred!");

区别:

输出流 说明
System.out 正常输出
System.err 错误输出

在控制台通常表现为:

  • out → 普通颜色
  • err → 红色

使用场景:

  • 打印错误信息
  • 日志系统
  • 调试程序

五、System.currentTimeMillis()(高频)

用于获取 当前时间戳(毫秒)

java 复制代码
long time = System.currentTimeMillis();
System.out.println(time);

输出示例:

复制代码
1710501023456

含义:

当前时间距离 1970-01-01 00:00:00 UTC 的毫秒数。


常见使用场景:计算程序运行时间

java 复制代码
long start = System.currentTimeMillis();

for (int i = 0; i < 1000000; i++) {
    Math.sqrt(i);
}

long end = System.currentTimeMillis();

System.out.println("耗时:" + (end - start) + " ms");

六、System.nanoTime()(更精确)

获取 纳秒级时间

java 复制代码
long start = System.nanoTime();

// 执行代码

long end = System.nanoTime();
System.out.println(end - start);

区别:

方法 精度 用途
currentTimeMillis 毫秒 获取当前时间
nanoTime 纳秒 测量时间间隔

面试常问:

计算代码执行时间用哪个?

答案:

复制代码
nanoTime()

因为它更精确。


七、System.exit()(程序终止)

用于 终止 JVM

java 复制代码
System.exit(0);

含义:

参数 含义
0 正常退出
非0 异常退出

示例:

java 复制代码
System.out.println("Start");

System.exit(0);

System.out.println("End");

输出:

复制代码
Start

End 不会执行。


八、System.arraycopy()(高频)

用于 数组快速复制

方法:

java 复制代码
System.arraycopy(src, srcPos, dest, destPos, length);

参数说明:

参数 含义
src 原数组
srcPos 原数组起始位置
dest 目标数组
destPos 目标起始位置
length 复制长度

示例:

java 复制代码
int[] a = {1,2,3,4,5};
int[] b = new int[5];

System.arraycopy(a, 0, b, 0, 5);

System.out.println(Arrays.toString(b));

输出:

复制代码
[1, 2, 3, 4, 5]

特点:

  • 效率非常高
  • 底层使用 native 方法

九、System.getProperty()(JVM 属性)

获取 JVM 属性。

java 复制代码
String version = System.getProperty("java.version");
System.out.println(version);

常见属性:

属性 含义
java.version Java版本
os.name 操作系统
user.name 当前用户
user.dir 当前工作目录

示例:

java 复制代码
System.out.println(System.getProperty("os.name"));

输出:

复制代码
Windows 11

十、System.getenv()(环境变量)

获取操作系统环境变量。

java 复制代码
String path = System.getenv("PATH");
System.out.println(path);

也可以获取全部环境变量:

java 复制代码
Map<String, String> env = System.getenv();

十一、面试高频问题

1:System.out 是什么类型?

答案:

复制代码
PrintStream

2:System 为什么不能实例化?

原因:

复制代码
构造方法是 private

3:currentTimeMillis 与 nanoTime 区别?

方法 作用
currentTimeMillis 获取当前时间
nanoTime 计算时间间隔

4:arraycopy 为什么比循环快?

因为:

复制代码
底层是 native 方法
直接调用 JVM 实现

十二、常见易错点

1:nanoTime 不能表示当前时间

错误:

java 复制代码
System.nanoTime();

它只是一个 时间计数器


2:System.exit 会直接终止 JVM

调用后:

  • finally 可能不执行
  • 线程会被强制结束

3:arraycopy 参数顺序

很多人会写错:

复制代码
srcPos
destPos

顺序必须记住。


十三、总结

System 是 Java 中最重要的基础类之一,核心能力包括:

功能 方法
控制台输出 out
控制台输入 in
错误输出 err
时间 currentTimeMillis / nanoTime
数组复制 arraycopy
程序退出 exit
JVM属性 getProperty
环境变量 getenv

一句话总结:

System 是 Java 与 JVM / 操作系统交互的核心桥梁。

相关推荐
DeepModel2 小时前
【概率分布】卡方分布的原理、推导与实战应用
python·算法·概率论
2501_911088232 小时前
C++中的代理模式变体
开发语言·c++·算法
予枫的编程笔记2 小时前
【面试专栏|Java并发编程】CAS 核心原理,优缺点,ABA问题与解决方案
java·并发编程·java面试·java并发·aba问题·cas原理·面试干货
2401_900151542 小时前
代码覆盖率工具实战
开发语言·c++·算法
进击的小头2 小时前
第8篇:PI控制器设计实战演练
c语言·python·mcu·算法
bu_shuo2 小时前
在命令行中编译cpp文件
开发语言·c++·cpp
We་ct2 小时前
React 更新触发原理详解
开发语言·前端·javascript·react.js·面试·前端框架·react
王的宝库2 小时前
Go 语言:结构体:定义、初始化、方法、组合、Tag、对齐
开发语言·后端·学习·golang
落日漫游2 小时前
Zabbix监控实战:Linux主机全流程配置
运维·开发语言·自动化